STL list-iterator-Problem
-
Ich stehe gerade auf der Leitung. Ich habe eine Liste
list<ExternalIOLib> m_libListEine Methode soll mir dann einzelne Elemente der Liste zurückliefern:
ExternalIOLib *ExternalIOLibs::getLib(bool start) { static list<ExternalIOLib>::iterator it; if (start) it=m_libList.begin(); return *it++; }Und das klappt nicht, der Teil nach return fliegt mir beim Compilieren um die Ohren: "cannot convert from 'class ExternalIOLib' to 'class ExternalIOLib *'"
Was mache ich falsch, wie bekomme ich aus dem Iterator einen Pointer auf das Element?
-
Entweder du änderst den Rückgabetyp der Methode:
ExternalIOLib ExternalIOLibs::getLib(bool start) { // wie vorher }oder du speicherst Zeiger in der Liste, anstatt der Objekte:
std::list<ExternalIOLib*> libList; // ... std::list<ExternalIOLib*>::iterator iter; // ...
-
Japp das klappt
Allerdings liefert mir der Iterator am Ende der Liste keine NULL sondern Datenmüll. Muss ich da selber mitzählen ob noch Elemente da sind?
-
Bei Iteratoren musst du auf
end()des Containers prüfen. Wenn der Vergleich mitoperator==truezurückgibt, bist du am Ende angelangt.
-
ExternalIOLib* ExternalIOLibs::getLib(bool start) { // static list<ExternalIOLib>::iterator it; // wenn die Liste ein member ist, dürfte das auch für einen persistenten Iterator richtig sein if (start) m_it=m_libList.begin(); return m_it != m_libList.end() ? &*it++ : 0; }