List Erase / Remove



  • Hallo Allerseits,

    Ich beschäftige mich gerade mit der STL und habe mich gerade an einer List versucht. Funktioniert auch soweit recht gut. Bis auf das remove oder erase.

    Ich habe eine List aus Pointern auf ein Objekt gemacht.

    void Navigator::del(string loc){
    
    for(list<Ort*>::const_iterator i = Locations.begin(); i != Locations.end(); i++){
            if((*i)->GetName()==loc){
                delete (*i);
                Locations.erase(i);
                cout << "Ort gelöscht!" <<endl;
            }
    
    }
    }
    

    Ich bekomme bei Locations.erase(i) die Fehlermeldung "Error, no matching function for call to..."
    Also der Compiler sagt mir er erwartet etwas anderes als ich in der Funktion übergebe. Dabei übergebe ich einen Iterator und das ist genau das was doch die Funktion verlangt... Bei einem Komilitonen funktioniert das seltsamerweise. Warum bei mir nicht?

    Vielen Dank für euren Rat schonmal.



  • Du übergibst einen const_iterator, die Funktion erwartet aber vor C++11 einen iterator.
    Darüber hinaus verwendest du rohe, besitzende Pointer, die du manuell deleten musst. Verwende Smartpointer, die löschen deine Objekte automatisch.



  • Okay alles klar danke 🙂
    Funktioniert



  • auto i = Locations.begin()
    

    dürfte in diesem Fall das Ganze etwas leichter machen.


  • Mod

    i++ nach erase?


Anmelden zum Antworten