CObList aufbauen
-
Hallo!
Ich suche seit Tagen nach einem Fehler in meinem Quellcode, aber ich mag ihn zu finden. Vielleicht fehlt mir auch einfach eine wichtige Grundlage:
Ich möchte eine CObList füllen. Jedesmal, wenn der Konstruktor aufgerufen wird, sollen die Übergabewerte der CObList hinzugefügt werden.
Mein Code dazu sieht so aus:
CObList obList; CData1::CData1(int m_x_pos, int m_y_pos, int m_z_pos) { x_pos = m_x_pos; y_pos = m_y_pos; z_pos = m_z_pos; //obList leer - einfach hinzufügen int bol = obList.GetCount(); if(bol==0) { obList.AddTail((CObject*) x_pos); obList.AddTail((CObject*) y_pos); obList.AddTail((CObject*) z_pos); } //schon Einträge vorhanden? else { //->"Nur" Aktualisierung der Position if((CObject*)(obList.GetTail())==((CObject*) z_pos)) { //veraltete Daten raus... for(int j = 0; j < 4; j++) { obList.RemoveAt(obList.GetTailPosition()); } //...neue Daten rein obList.AddTail((CObject*) x_pos); obList.AddTail((CObject*) y_pos); obList.AddTail((CObject*) z_pos); } else { //Daten einfach am Ende der Liste hinzufügen obList.AddTail((CObject*) x_pos); obList.AddTail((CObject*) y_pos); obList.AddTail((CObject*) z_pos); } } bol = obList.GetCount(); //ergibt bei jedem Durchlauf 3 }
Wird der Konstruktor aufgerufen, scheint er die Einträge wirklich zu tätigen - zumindest ist die CObList-Länge dann 3. Wir er allerdings wieder aufgerufen sind die alten Einträge weg.
-
Erstens: Was soll denn der Cast von int nach CObject*?
Zweitens: Du hast drei Objekte in deiner Liste, löschst aber vier wieder raus.
Drittens: Frag' mal den Debugger, durch welchen Zweig der inneren if()-Schleife er durchläuft.
Viertens: Ist obList eine globale Variable oder ein Element von CData1? Im letzteren Fall hat jedes Objekt seine eigene Kopie der Liste und beginnt immer mit bol==0.
-
Erstens: Was soll denn der Cast von int nach CObject*?
Ich kriege sonst eine Fehlermeldung, dass der Compiler int nicht in COBject* umwandeln kann.
Zweitens: Du hast drei Objekte in deiner Liste, löschst aber vier wieder raus.
Stimmt - löst das Problem aber nicht...
Drittens: Frag' mal den Debugger, durch welchen Zweig der inneren if()-Schleife er durchläuft.
Jeweils in if-Block ab Zeile 12, da ja die List-Länge 0 ist.
Viertens: Ist obList eine globale Variable oder ein Element von CData1? Im letzteren Fall hat jedes Objekt seine eigene Kopie der Liste und beginnt immer mit bol==0.
Global.
-
joergh schrieb:
Erstens: Was soll denn der Cast von int nach CObject*?
Ich kriege sonst eine Fehlermeldung, dass der Compiler int nicht in COBject* umwandeln kann.
Vielleicht ist ja CObList nicht das richtige für dich. Versuch' mal, stattdessen eine std::list<int> zu verwenden.
Drittens: Frag' mal den Debugger, durch welchen Zweig der inneren if()-Schleife er durchläuft.
Jeweils in if-Block ab Zeile 12, da ja die List-Länge 0 ist.
Dann solltest du mal überwachen, was zwischen den einzelnen Ctor-Aufrufen mit deiner Liste passiert.
PS: Was willst du mit dieser Liste überhaupt erreichen?
-
Ich will später serialisieren, daher CObList. Da sollen auch nicht nur ints rein, sondern später auch andere...
-
joergh schrieb:
Ich will später serialisieren, daher CObList.
Du kannst auch die STL-Container serialisieren, wenn du unbedingt willst. Also ist das kein Hindernis.
Da sollen auch nicht nur ints rein, sondern später auch andere...
Das erklärt immer noch nicht, was du eigentlich vorhast.
(und schau mal nach, wer außer diesem Konstruktor noch mit deiner Liste arbeitet)