Liste mit Objektpointern



  • Hallo Zusammen,

    habe ein kleines Problem mit C++ und hoffe mir kann jemand weiter helfen. Also, ich habe eine Liste mit Objektpointern erstellt(HEADER):

    public:
      ...
      void AddToList(ComicFigure *);
      void DeleteFromList(string);
    
    private:
      list<ComicFigure*> player;
      list<ComicFigure*>::iterator myIterator;
    

    Nun will ich eine Funktion bauen, mit der ich Player aus dieser Liste löschen kann.
    Aufgerufen wird diese Funktion mit dem Namen des Spielers, leider kapiere ich nun aber nicht, wie ich den Listeneintrag löschen kann(CPP):

    void Comic::DeleteFromList(string name)
    {
      for (myIterator = player.begin(); myIterator != player.end(); myIterator++)
    	  if ((*myIterator)->getName() == name)
              {
    		  //und hier komme ich nicht weiter:
                      player.remove(*myIterator);  //geht nicht
              }
    }
    

    Ist wahrscheinlich wirklich ein blöder Anfängerfehler, ich habe jedoch nichts in den FAQs über Listen gefunden und mein Buch kann mir auch nicht weiter helfen. Über eine kleine Hilfe würde ich mich jedoch sehr freuen 🙂



  • Zum Löschen aus der Liste verwendest du die Methode erase():

    for(list<ComicFigure*>::iterator pos=player.begin();pos!=player.end();)
    {
      if(pos->getname()==name)
        myIterator=player.erase(myIterator);
      else
        ++pos;
    }
    

    (Achtung: erase() macht den Iterator, auf den es angewandt wird, ungültig - deshalb mußt du mit dem Rückgabewert der Methode weiterarbeiten)

    PS: Übrigens mußt du den Iterator nicht auf Verdacht mit rumschleppen - auch Methoden dürfen lokale Variablen anlegen.



  • Wow, vielen Dank für die Schnelle Antwort, so macht das Sinn!

    Ich habe die Erase Methode auch schon versucht, jedoch wusste ich nicht dass der Iterator ungültig wird, daher bakam ich böse Ausnahmefehler... .


Anmelden zum Antworten