Komischer Fehler: String vektor Iterator
-
Hallo,.
ich habe eine Funktion geschrieben, die mir aus einem vector<Data> theCatalog zu einer bestimmten ID (int) einen Namen zurückgeben soll.
Mein Code mal zur Anschauung:const string getFilename(const int ID) { std::vector<Data>::iterator myIt; myIt = theCatalog.begin(); while(myIt = theCatalog.begin();myIt!= theCatalog.end(); myIt ++) { Data data = *myIt; // ergebnis ist das worauf der Iterator zeigt if (ID == data.getID() ) return data.getName(); } if ( myIt!= theCatalog.end()) return ""; }Der Code kompiliert soweit ganz gut, guíbt mir eine Fehlermeldung mit der ich garnichts anfangen kann:
error C2582: Die Funktion 'operator =' ist in 'Data' nicht verfügbar.
Muss ich in Data noch irgendwas einfügen, wenn ja, was?
mein data sieht so aus:
Class Data { public: Data (int pictureID, const string& aPicture); Data(); virtual ~Data(); int getID() const; const string& getNama() const; static Data readDt(char* line, char delimiter','); private: const int id; const string name; friend ostream& operator<< (ostream &output, const Data &p); };Ich hoffe mir kann jemand helfen!
Liebe Grüße
Tilli
-
TilliDreger schrieb:
Muss ich in Data noch irgendwas einfügen, wenn ja, was?
Ja: 'operator ='
-
Hi!
Entweder das, oder du machst aus Data data einen Zeiger. Oder gehst den direkten Weg und lässt data ganz raus.
grüße
-
So, damit andere nicht auch mal die selbe Frage stellen:
Data& operator= (const Data &p) {return *this};in die Klasse Data einfügen. Dann gehts !!!
byebye
-
Macht auch so viel Sinn. Und danach soll deine o.g. Methode noch funktionieren? *zweifel*
-
@Tilli: das letzte war Reis.
Normalerweise wird ein Standard-Assignment-Operator angeboten, es sei denn, dieser kann nicht generiert werden (z.B. Member oder Basisklasse deklariert seinen assignment operator private).
Bist du dir sicher, daß du bei Data nicht noch was verschweigst?

Data data = *myIt;hier könntest Du mit
Data /* const */ &data = *myIt;arbeiten - vermeidet eine unnötige Kopie, und löst dein aktuelles problem. Nur daß STL-Container für Klassen ohne Assignment-Op sehr mühselig sind.