std::list



  • Hallo Forum,

    ich habe 2 Fragen zu Listen:
    1. Wenn ich eine Liste als Variable habe (nicht als Pointer) und dieser einer anderen Liste zuweise. Wird dann nur das Listenobjekt kopiert oder auch die darin liegenden Elemente?

    2. Ich habe diese Liste:

    std::list<Myclass *> m_oLstAbc;
    
    // Und jetzt tue ich ein Obj rein und nehme es wieder raus:
    m_oLstAbc.push_back(ptrMyclass);
    Myclass *ptrCurrentMyclass = m_oLstAbc.pop_front();
    

    Jetzt kommt diese Meldung.
    error C2440: 'Typumwandlung': 'void' kann nicht in 'Myclass *' konvertiert werden

    Warum gibt er mir ein viod* heraus?

    Vielen Dank

    Luigi


  • Mod

    Luigi_X schrieb:

    Hallo Forum,

    ich habe 2 Fragen zu Listen:
    1. Wenn ich eine Liste als Variable habe (nicht als Pointer) und dieser einer anderen Liste zuweise. Wird dann nur das Listenobjekt kopiert oder auch die darin liegenden Elemente?

    Der Inhalt wird kopiert:

    http://www.cplusplus.com/reference/stl/list/operator=/

    2. Ich habe diese Liste:

    std::list<Myclass *> m_oLstAbc;
    
    // Und jetzt tue ich ein Obj rein und nehme es wieder raus:
    m_oLstAbc.push_back(ptrMyclass);
    Myclass *ptrCurrentMyclass = m_oLstAbc.pop_front();
    

    Jetzt kommt diese Meldung.
    error C2440: 'Typumwandlung': 'void' kann nicht in 'Myclass *' konvertiert werden

    Warum gibt er mir ein viod* heraus?

    Weil pop_front nunmal void zurück gibt.

    http://www.cplusplus.com/reference/stl/list/pop_front/

    Lies dir lieber erstmal die Referenz zu std::list durch, das wird wahrscheinlich alle weiteren Fragen beantworten:
    http://www.cplusplus.com/reference/stl/list/



  • Weil pop_front dir überhaupt nichts zurück liefert.

    Du kannst dir das erste Element mit front holen und es dann mit pop_front popen (wenn dass überhaupt das ist was du willst).


  • Mod

    Oh, man sollte natürlich noch erwähnen, dass der Operator = nicht auf magische Weise deep-copies macht. Der ruft einfach nur = für alle Elemente auf. Wenn du in deiner Liste blanke Zeiger gespeichert hast, werden daher nur die Zeiger kopiert, nicht die Objekte auf die gezeigt wird.



  • Vielen Dank SeppJ und FrEEzE2046 🙂
    Ich werde das nächste Mal vorher im Internet suchen.


Anmelden zum Antworten