Problem mit Iterator
-
Hallo,
ich habe ein Problem mit einem Iterator.
Ich habe eine Liste _active_Conv mit Objekten, die ich Conversations genannt habe. Diese will ich durchlaufen und dann ein Objekt namens Message an die Conversation anfügen wenn die ID der Conversation die richtige ist. Das Anfügen der Message usw funktionieren auch alles innerhalb des Iterators, aber nach Durchlaufen des Iterators sieht die Liste wieder genauso aus wie vorher. Ist wahrscheinlich ein ganz blöder Anfängerfehler, aber ich bin noch nicht so lange dabei und wäre über Hilfe wirlich sehr dankbar.Hier der betreffende Code :
list<Conversation>::iterator Iter;
for (Iter=_active_Conv.begin(); Iter!=_active_Conv.end() ; Iter++) {
Conversation temp = *Iter;
if (temp.get_ConvID()==convID){
temp.add_Message(m);
}
}Danke schon mal im Voraus
-
Sonja1982 schrieb:
...
Conversation temp = *Iter;
...was soll das denn??
brauchst doch keine dereferenzierung bei einem nicht pointer -> stern weg!!
-
Du modifizierst ja nur die Copy des Objects von *iter:
list<Conversation>::iterator Iter; for (Iter=_active_Conv.begin(); Iter!=_active_Conv.end() ; Iter++) { Conversation temp = *Iter;//Copy out if (temp.get_ConvID()==convID) { temp.add_Message(m); } *Iter = temp;//Copy back }
-
Hab das mit dem Zurückkopieren jetzt ausprobiert und hörte sich für mich eigentlich auch recht logisch an. Aber funktioniert immer noch nicht so richtig.
Hat irgend jemand noch eine Idee, woran das liegen könnte ? Ich hab nochmal gründlich alles durchgetestet und alle Funktionalität umzu und auch innerhalb des Iterators funktioniert...
-
list<Conversation>::iterator Iter; for (Iter=_active_Conv.begin(); Iter!=_active_Conv.end() ; ++Iter){ if (Iter->get_ConvID()==convID){ Iter->add_Message(m); } }
Du brauchst keine Extravariable, du kannst zeiger direkt beim Aufruf dereferenzieren a-> = (*a).
-
Die Originalfrage betreffend: Du hast ein Und vergessen:
list<Conversation>::iterator Iter; for (Iter=_active_Conv.begin(); Iter!=_active_Conv.end() ; Iter++) { Conversation & temp = *Iter; // Hier if (temp.get_ConvID()==convID){ temp.add_Message(m); } }
Du willst ja das Originalobjekt verändern und nicht nur eine Kopie.
brauchst doch keine dereferenzierung bei einem nicht pointer -> stern weg!!
Anfänger verarschen ist gemein! Lass das bitte!
-
Jetzt läuft es ! Danke für eure Hilfe.