Array als Member einer Klasse **gelöst**
-
Hi,
ich möchte
public ref class CTest { private: array<unsigned short> ^rguwData = gcnew array<unsigned short>(6); public: CTest(){} }
Er meldet error C3845: "CTest::rguwData": Nur statische Datenmember können innerhalb einer Verweisklasse oder eines Werttyps initialisiert werden.
Ich möchte aber keine statischen member
Wie mache ich das richtig?
MfG
-
Dann erzeuge dein Array im Konstruktor!
-
aber der Konstruktor hat doch keinen Rückgabewert was ist wenn das dann nciht klappt?
CTest(array<unsigned short> ^rguwTestData) { if (rguwData = gcnew array<unsigned short>(6)) System::Array::Copy(rguwTestData,rguwData,(6 > rguwTestData->Length)?rguwTestData->Length:6); else // ?????????????? }
-
1. Wenn gcnew fehlschlägt, wird weder Dein if noch Dein else erreicht, weil eine Exception fliegt.
2. Wenn Du im Konstruktor einen Fehlschlag signalisieren möchtest, wirf selbst eine.Davon abgesehen, wo wäre der Unterschied bei der Initialisierung? Du kannst erst im oder nach dem Konstruktor feststellen, ob das Ergebnis stimmt, da Code a la
if (rguwData)
erst recht nicht im Klassenrumpf notiert wird.
-
Außerdem: Was willst du mit dem kaputten Objekt anstellen wenn die Erzeugung fehlschlägt?
-
zerstören
also kann ich das if getrost weglassen, da es mir eh eine exeption wirft wenn gcnew Fehlschlägt?
-
Ja, solltest halt nur irgendwo weiter oben das in einem try..catch laufen lassen dass die Exception nicht bis zum OS durchgereicht wird.