std::list zickt rum
-
Hi,
als ich heute ein Beispiel aus meinem C++ Buch ausprobieren wollte, bekam ich an dieser Stelle immer die unten genannten Fehlermeldungen.for (std::list<strct>::iterator it = m_List.begin(); it != m_List.end(); it++) { if(it->i == 4) m_List.remove(it); } struct strctConnection { int i; std::string bla; };
bekomme ich immer diese Fehlermeldungen:
auth-server.cpp:146: error: no matching function for call to ` std::list<strctConnection, std::allocator<strctConnection> >::remove( std::_List_iterator<strctConnection, strctConnection&, strctConnection*>&)' /usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.2/include/g++-v3/bits/list.tcc:182: error: candidates are: void std::list<_Tp, _Alloc>::remove(const _Tp&) [with _Tp = strctConnection, _Alloc = std::allocator<strctConnection>]
Wie kann das angehen ? Ist doch kein Fehler enthalten oder ?
Bye
-
du hast remove und erase verwechselt. Das eine ist für Iteratoren, das andere für Objekte
-
Dieser Thread wurde von Moderator/in kingruedi aus dem Forum Linux/Unix 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.
-
Achtung: Wenn man ein Element einer Liste loescht, werden die Iteratoren ungueltig. erase liefert aber einen neuen Iterator zurueck -> Doku.
-
Achtung: Wenn man ein Element einer Liste loescht, werden die Iteratoren ungueltig. erase liefert aber einen neuen Iterator zurueck -> Doku.
Bei einer Liste ist es nur der Iterator der auf das glöschte Objekt verwies, nicht alle Iteratoren. Das ja einer der grossen Vorteil einer Liste.