vector Problem
-
Hallo zusammen.
Ich habe mir eine Klasse definiert
class clsTest1 { public: clsTest1(); ~clsTest1(); int Wert1; int Wert2: };dazu lasse ich in der header von meiner Dlg Klasse eine neue member erstellen
clsTest1 *testsession; vector<clsTest1*> TestListe;jetzt habe ich in meiner CPP Dlg Datei folgendes stehen:
if ( ausdruck1 == ausdruck2 ) { TestListe.push_back(testsession); }so, das funktioniert auch alles soweit
wenn ich das erste Element zuweise
TestListe[0]->Wert1 = 500; TestListe[0]->Wert2 = 799;funktieniert das auch alles noch wunderbar.
wenn ich jetzt aber noch nen 2. Element durch die if oben hinzubekomme und dieses dann auch wieder mit werte belege
TestListe[1]->Wert1 = 600; TestListe[1]->Wert2 = 200;dann habe ich dann dieses Ergebnis:
TestListe[0]->Wert1 = 600; TestListe[0]->Wert2 = 200; TestListe[1]->Wert1 = 600; TestListe[1]->Wert2 = 200;obwohl die Werte für den Index 0 eigentlich so sein müssten:
TestListe[0]->Wert1 = 500; TestListe[0]->Wert2 = 799;was mache ich falsch?
danke für eure hilfe
-
Dieser Thread wurde von Moderator/in estartu aus dem Forum MFC (Visual C++) in das Forum C++ verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Hi, erstmal hoffe ich das dein testsession überhaupt auf ein Objekt zeigt.
Zweitens, wenn dass der Fall ist zeigt der Zeiger testsession immer auf das selbe Objekt und wenn du testsession nochmal in den Vector pushst, hast du zwei Zeiger im Vektor die auf ein Objekt zeigen.Spare dir die ganze Zeiger-Geschichte und mache es doch ganz normal:
vector<clsTest1> TestListe; //... if ( ausdruck1 == ausdruck2 ) { TestListe.push_back(clsTest1()); } //... TestListe[0].Wert1 = 500; TestListe[0].Wert2 = 799;?
-
Du hast EIN Objekt und packst n Zeiger auf dieses eine Objekt in deinen vector<>. Das bedeutet auch, egal über welchen dieser Zeiger du etwas änderst, es betrifft jedes Mal das selbe Objekt.
Und damit kommen wir auch gleich zur Lösung: Vergiss die Zeiger und pack die Objekte direkt in den vector<>:
clsTest1 testsession; vector<clsTest1> TestListe; ... if ( ausdruck1 == ausdruck2 ) { TestListe.push_back(testsession); } ... TestListe[i].Wert1=4711;(hier ist jedes Element eine Kopie der lokalen Variablen testsession - und damit auch unabhängig von dieser und von allen anderen vector-Elementen)
-
In deinem Vector stehen ja nur Zeiger auf jeweils ein Objekt; testsession ist auch ein Zeiger auf ein Objekt.
Wenn testsession auf ein Objekt zeigt und du diesen Zeiger zwei mal in den Vector drückst, zeigen TestListe[0] und TestListe[1] auf das selbe Objekt. Deshalb haben die Objekte hinter dem Zeiger immer dieselben Werte, egal ob du sie nun von TestListe[0] oder von TestListe[1] aus änderst
Grundgütiger bin ich langsam

-
alles klar
problem verstanden

kompilierung war erfolgreich
test kommt jetzt

vielen dank schonmal