<vector> probleme mit iterator. wo liegt der denkfehler?



  • hallo!
    Ich habe eine Klasse für eine mp3 playlist erstellt:

    class CPlaylist{
    public:
    CPlaylist(string Path, string Name, bool rndm);
    ~CPlaylist();
    string getNextSong();
    private:
    string path;
    string name;
    bool random;

    protected:
    vector<CSong*> SongListe;
    vector<CSong*>::iterator ITL;

    };

    in getNextSong() soll der Iterator ITL wenn die liste durchlaufen ist wieder an den anfang zurück. jedoch wird irgendwie immer ein leeres element zwischendurch geliefert:

    string CPlaylist::getNextSong(){

    if(random == false){

    string x = (*ITL)->getName();
    ITL++;
    if(ITL==SongListe.end()){ //hier wird das problem
    ITL =SongListe.begin(); //wohl liegen
    }
    return path + x;

    //snip

    der fehler ist bestimmt offensichtlich, ich fange gerade mit c++ an.

    gruß

    marius g



  • "x = ITL->getName();" muss hinter die "sind wir schon am ende" auswahl. 😃
    ausserdem => code - tags!



  • Das was betrug gesagt hat trifft soweit zu. iterator::end() ist last_element + 1 und somit ungueltig.

    P.S. iteratoren bitte prefix, statt mit postfix operatoren benutzen.



  • tschuldigung für die sache mit den code-tags. habe garnicht gesehen, was mir da unten in dem board für sachen zur verfügung stehen. war etwas eilig mit dem thread. das andre werde ich mal ausprobieren. vielen dank!



  • @SnorreDev: Was hat das mit dem Prefix Operator denn aufsich? kannst du das vielleicht kurz erläutern? Ich hab hier nämlich blos das skript von nem Informatikpraktikum was ich mal an der Uni gemacht hab rumliegen und da wird das auch so

    iterator++
    

    verwendet.



  • FAQ



  • Vielen Dank!
    Das Problem ist gelöst und den Vorteil der Präfix-Operatoren habe ich auch verstanden. Nettes Forum hier... werde mich mal registrieren.

    Gruß

    Marius


Anmelden zum Antworten