object vector entfernen



  • Wenn ich versuche albums zu löschen es compilert zwar aber passiert nichts ich gehe davon aus mit erase es versucht nur den Wert zu löschen und nicht den Inhalt.Ich habe stundenlang im google gesucht aber erase ist die einzige möglichkeit die ich finden konnte!(sorry for long post!)

    case 3:
        cout<<"Geben Sie den Namen des Albums den Sie loschen mochten : ";
        cin>>arama;
        for(int a=1;a<(albumler.size()+1);a++){
        if(albumler[a-1].AlbumName()==arama)
    	albumler.erase(albumler.begin() +a);
        }
        albumanzahl--;
        break;
    
    /*Ein befreundeter fanatischer CD-Sammler hat Sie gebeten, ihm ein einfaches Programm zur
    Verwaltung seiner Sammlung zu schreiben. Er wünscht sich folgende Funktionen: Für jedes Album
    sollen Interpret, Name und Stilrichtung speicherbar sein. Eingabe, Ändern und Löschen von
    Eintragungen soll möglich sein. Eine Suche soll entweder nach Interpret, nach Albumname oder
    Stilrichtung vorgenommen werden können und eine Liste aller jeweils passenden CDs liefern.*/
    
    #include<iostream>
    #include<vector>
    #include<string>
    using namespace std;
    class Album{
    
        string Name;
        string Interpret;
        string Stillrichtung;
    public:
        Album(string a,string b,string c){Name=a;Interpret=b;Stillrichtung=c;}
        void changeName(string a){Name=a;}
        void changeInterpret(string b){Interpret=b;}
        void changeStillrichtung(string c){Stillrichtung=c;}
    
        string AlbumName(){return Name;}
        string AlbumInterpret(){return Interpret;}
        string AlbumStillrichtung(){return Stillrichtung;}
    
    };
    
    int main()
    {
    vector<Album> albumler;
    string b,c,d,arama,yeni;
    int secenek,degistirme,tekrar=1;
    while(tekrar)
    {
    cout<<"was mochten Sie tun : "<<endl;
    cout<<"1. Eingabe: "<<endl;
    cout<<"2. Andern : "<<endl;
    cout<<"3. Loeschen : "<<endl;
    cout<<"4. Butun albumler : "<<endl;
    cin>>secenek;
    switch(secenek)
     {
        case 1:
        cout<<"Album ismi : ";
        cin>>b;
        cout<<"müzik yorumu : ";
        cin>>c;
        cout<<"yorum stili : ";
        cin>>d;
        albumler.push_back(Album(b,c,d));
        break;
    
        case 2:
        cout<<"was mochten Sie andern? : "<<endl;
        cout<<"1. Name : "<<endl;
        cout<<"2. Interpret : "<<endl;
        cout<<"3. Stillrichtung : "<<endl;
        cin>>degistirme;
        switch(degistirme){
    
        case 1:
        cout<<"Geben Sie den Namen des Albums die Sie andern mochten :";
        cin>>arama;
        cout<<"geben Sie neuer Name : ";
        cin>>yeni;
        for(int a=0;a<albumler.size();a++){
            if(albumler[a].AlbumName()==arama)
            albumler[a].changeName(yeni);}
    
        break;
    
        case 2:
        cout<<"Geben Sie den Interpret des Albums die Sie andern mochten :";
        cin>>arama;
        cout<<"geben Sie neuer Interpret : ";
        cin>>yeni;
        for(int a=0;a<albumler.size();a++){
            if(albumler[a].AlbumInterpret()==arama)
            albumler[a].changeInterpret(yeni);}
        break;
    
        case 3:
        cout<<"Geben Sie den Stillrichtung des Albums die Sie andern mochten :";
        cin>>arama;
        cout<<"geben Sie neuer Stillrichtung : ";
        cin>>yeni;
        for(int a=0;a<albumler.size();a++){
            if(albumler[a].AlbumStillrichtung()==arama)
            albumler[a].changeStillrichtung(yeni);}
        break;
    
        }
    
        break;
    
        case 3:
        cout<<"Geben Sie den Namen des Albums den Sie loschen mochten : ";
        cin>>arama;
        for(int a=1;a<(albumler.size()+1);a++){
        if(albumler[a-1].AlbumName()==arama)
    	albumler.erase(albumler.begin() +a);
        }
        break;
    
        case 4:
        for(int a=0;a<albumler.size();a++){
        cout<<albumler[a].AlbumName()<<endl;
        cout<<albumler[a].AlbumInterpret()<<endl;
        cout<<albumler[a].AlbumStillrichtung()<<endl;
        cout<<"vector size :"<<albumler.size()<<endl;
        }
        break;
    
     }
    
    }
    
    }
    


  • Dieser Thread wurde von Moderator/in akari aus dem Forum VCL (C++ Builder) in das Forum C++ (auch C++0x und C++11) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • C++ Forumbot schrieb:

    Dieser Thread wurde von Moderator/in akari aus dem Forum VCL (C++ Builder) in das Forum C++ (auch C++0x und C++11) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.

    Verschieb es in die Müllhalde.



  • Müllhalde!! Warum? wenn du nichts sinnvolleres zu schreiben hast, bitte spam nicht!



  • astet schrieb:

    Müllhalde!! Warum?

    Lies das.


  • Mod

    Sone, du bist hier nicht der Forenaufseher. Du selber bist wohl mit Abstand der Top-Poster im Müllforum. Der Beitrag ist doch ein guter Anfang, bloß noch ein paar Unklarheiten:

    es compilert zwar aber passiert nichts

    Was genau gibst du ein, was genau passiert, was genau erwartest du, was passiert?

    ich gehe davon aus mit erase es versucht nur den Wert zu löschen und nicht den Inhalt.

    Was soll der Unterschied sein?

    Bei solchen Problemen bietet sich auch der Einsatz eines Debuggers an, damit man den tatsächlichen Programmverlauf mit Erwartungen vergleichen kann. Oder falls man absolut nicht mit einem Debugger umgehen kann, dann zur Not einfach ein paar Kontrollausgaben. Dann aber bald lernen, mit dem Debugger umzugehen, das ist wichtig.



  • bis auf

    case 3:
        cout<<"Geben Sie den Namen des Albums den Sie loschen mochten : ";
        cin>>arama;
        for(int a=1;a<(albumler.size()+1);a++){
        if(albumler[a-1].AlbumName()==arama)
    	albumler.erase(albumler.begin() +a);
        }
        break;
    

    funktioniert alles wie ich will.

    ich gehe davon aus mit erase es versucht nur den Wert zu löschen und nicht den Inhalt.

    in case 3 albumler.size() dekrementiert sich zwar aber löscht nicht das Objekt dessen AlbumName string tarama ist.



  • Du findest albumler[a-1] :
    if(albumler[a-1].AlbumName() == tarama)

    Und löschst dann albumler[a] :
    albumler.erase(albumler.begin() + a);



  • so ein fehler jetzt funktioniert es danke mehrmals


Anmelden zum Antworten