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!
-
-
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