Dynamisches Array als member einer Klasse?

UncleBob

Mitglied
Das Problem sieht in etwa folgendermassen aus:

Ein öffentlicher Member einer Klasse ist ein Array (einer anderen selbsterstellten Klasse), von dem ich im vorherein aber nicht weiss wie gross es sein muss. Die Grösse sollte beim initialisieren der Klasse festgelegt werden. Ich habe damit im Moment noch einige Probleme, irgendwie habe ich wohl etwas entscheidendes noch nicht ganz begriffen.

Deklariert wird das Array im Header von MyOtherClass folgendermassen, unter public:

MyClass *Trow;

In MyOtherClass::Init wird sie dann wie folgt angepasst:

MyClass *Trow = new MyClass[X];

wobei X die erst jetzt bekannte grösse des Arrays ist.
Die einzelnen instanzen werden dann gefüllt, und soweit funktioniert die Sache auch. Ich erhalte keine Synthaxfehler, und wenn ich die initialisierung mit breakpoints mitverfolge läuft auch alles wie geschmiert. Das Array wird erstellt und gefüllt. Nur: sobald die Funktion MyOtherClass::Init verlassen wird, ist das ganze Array wieder weg!
Es kommt mir fast so vor als ob der Compiler das veränderte Array als Lokal betrachtet und es hinterher wieder wegschmeisst, obwohl es am Ende eigentlich ein öffentlicher Member meiner Klasse sein sollte.
Kann mir jemand auf die Sprünge helfen wie ich das Problem lösen soll?
 
Also public ist hier das schlimmste was du machen kannst. Da hast du 0 kontrolle und das Verhalten deiner Klasse ist 0 vorhersehbar.

MyClass *Trow = new MyClass[X]; lass da einfach mal das MyClass* vor weg und dann geht das auch ;) Du hast die Variable ja schon angelegt warum nochmal lokal anlegen?!
 
Ha, das hat geklappt! Ich bin etwas erstaunt dass mir der Compiler keine Doppeldeklaration oder so etwas angekreidet hat...
Jedenfalls vielen Dank. Ich weiss das Public für sowas nicht gerade üblich ist, aber die Klasse wird nicht oft gebraucht und ich denke das sollte schon gehen... Werds sehen.
 
Zurück