STL list<T>
-
Ich hab da ein kleines großes Problem mit STL Listen:
ich hab eine Klasse attribute:
class attribute { public: string attributeName; string attributeValue; attribute (string name, string value) {attributeName = name; attributeValue = value;} ~attribute () {} };
eine Klasse A:
class A { public: list<attribute> attributeList; void addAttribute (string name, string value) { attribute newItem(name, value); attributeList.push_front(newItem); } void report() { // Der << operator in der attribute Klasse ist überschrieben ostream_iterator<attribute> out(cout, "\n"); copy(attributeList.begin(), attributeList.end(), out); } };
und eine Klasse B:
class B{ public: list<A> aList; void addA(A& a2Add) { aList.push_back(a2Add); } void report() { list<A>::iterator iter; for (iter = aList.begin(); iter != aList.end(); iter++ ) iter->report(); } };
mein Hauptprogramm sieht so aus:
main() { A a1; a1.addAttribute("NAME1","VALUE1"); B b1; b1.addA(a1); b1.report(); a1.addAttribute("NAME2","VALUE2"); b1.report(); }
So nun endlich zu meinem Problem:
und zwar wird das zweite Attribute beim zweiten Aufruf der report() funktion aus B nicht angezeigt!
Ich vermute das beim einfügen von a1 in die Liste von B nicht das Objekt eingefügt wird sondern nur eine Kopie! Und das neue Attribute wird in das ursprüngliche Objekt eingefügt und nicht in das in der Liste.
Ich bin mir da aber nicht sicher...
Weiß da jemand Rat... ich bin schon am verzweifeln! Hab nicht sehr viel Ahnung wie das intern in der STL abläuft!
DANKE
-
Ja, du arbeitest innerhalb deiner Klassen mit einer Kopie von a1 und nicht mit
a1 selbst.mfg
v R
-
Wie kann ich das verhindern?????
-
Du koenntest einen Zeiger auf das Objekt speichern. Das bringt aber Gefahren mit
sich: Wenn das lokale Objekt jetzt zerstoert wird, zeigst du auf kein gueltiges
Objekt mehr.Stell doch einfach oeffentliche Schnittstellen zur Verfuegung, mit deren Hilfe
du Attribute hinzufuegen kannst.mfg
v R