STL list-iterator-Problem



  • Ich stehe gerade auf der Leitung. Ich habe eine Liste

    list<ExternalIOLib> m_libList
    

    Eine 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 mit operator== true zurückgibt, bist du am Ende angelangt.


  • Mod

    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;
    }
    

Anmelden zum Antworten