CPtrArray und eigene Klasse wie komm ich jetzt an meine Daten?
-
Schönen guten Tag...
Ich habe leider ein ernsthaftes Problem mit meiner schönen Klasse und dem CPtrArray.
Ich habe eine Klasse "Kuchen" (ohne Assistent!) erstellt und möchte jetzt mehrere Objekte der Klasse in einem Array verwalten.
Nachdem meine Versuche mit CArray gescheitert waren (wohl wegen der fehlenden Ableitung von CObject bei meiner Klasse Kuchen) bin ich auf CPtrArray umgestiegen. Ich kann die Objekte meiner Klasse anlegen und die Speicheradresse in meinem CPtrArray speichern. Soweit so gut.Leider komm ich jetzt nicht mehr an meine Daten ran. Jeglicher Versuch mein frisch erstelltes Kuchenobjekt auf die in CPtrArray gespeicherte Adresse zu beigen ist gescheitert. In den zuvor erfolgreich beschriebenen Attributen meines Kuchenobjekts steht nur Mist. (Wer will schon Mistkuchen? :))
Kurzum mir gelingts einfach nicht aus dem void* ein CKuchen zu machen.
Ich hoffe das ist einigermaßen verständlich gewesen und mir kann wer helfen.
1000 Dank schonmal im Vorraus!Edit:
Ich hab übrigens auch einen Copy-Konstruktor angelegt. Leider stürzt mir das Programm ab wenn ich dann eine der Getmethoden des im Konstruktor übegebenen Kuchenobjekts aufrufen will. Ist auch kein Wunder in den Variablen steht wie gesagt nur Mist.
-
Eigentlich dich relativ einfach, ok Quelltext kenne ich von Dir nicht. Ich werde mal meine Kristallkugel bemühen :).
Setzen:
CPtrArray My_Array; //in *.h //in *.cpp CKuchen My_Kuchen = new CKuchen; My_Kuchen->Belag = "Sahne; My_Array.Add((void*)My_Kuchen);Lesen:
CKuchen *My_Kuchen = My_Array.GetAt(0); if(My_Kuchen) { //Mach was mit dem Kuchen, Backen zb. ::AfxMessageBox(My_Kuchen->Belag); }Nur mal so aus dem stehgreif, vergiss aber nicht im Destructor der Klasse die das PtrArray enthält, den Speicher der einzelnen Kuchenobjecte wieder frei zu geben.
zBsp:
int size = My_Array.GetSize(); for (int x = 1; x <= size; x++) { CKuchen* My_Kuchen = (CKuchen*)My_Array.GetAt(0); delete My_Kuchen; My_Array.RemoveAt(0); }Gruß
-
Nur zur Ergänzung:
hier
CKuchen *My_Kuchen = new CKuchen;fehlte noch der *
-
Erstmal Danke für die Hilfe.
Ich hab mich jetzt an Eurem Beispiel orientiert und nun das Problem, dass ich bei
My_Array.Add((void*)My_Kuchen);Die Umwandlung von CKuchen in void* nicht machen kann
und bei
CKuchen *My_Kuchen = My_Array.GetAt(0);Die Umwandlung von void* in CKuchen nicht machen kann.
Letzteres konnte ich lösen in dem ich einen KonstruktorCKuchen::CKuchen(void* Kuchen) { //m_strKuchenName = Kuchen->GetKuchenName(); }erstellt habe. An die Werte komm ich aber nicht dran.
So kommts, dass ich dann bei
CKuchen *TempKuchen = (CKuchen*)My_Array->GetAt(i);Nicht meine Werte im TempKuchen stehen habe. i ist übrigens 0.
-
Hat sich erledigt. Ich hab an einer Stelle meinen Kuchen nicht als Pointer geführt, deswegen wurde nach dem verlassen der Funktion der Speicher wieder frei gegeben. Weil er noch nicht gänzlich überschrieben wurde haben die Werte teilweise gestimmt, teilweise nicht.