000
01.03.2006, 14:43 Uhr
ip
|
Hoi!
Zunächst eine grobe Übersicht über mein Dilemma:
Ich habe eine Klasse CFoo, welche einen Bezeichner String enthält. Ich möchte meine Instanzen in einer STL Liste sichern und mithilfe des find Algorithmus das Objekt mit einem bestimmten Bezeichner String finden.
Ich hatte das ganze wie folgt implementiert:
Code: |
class CFoo { public: string Bezeichner; bool operator== (CFoo compare) { return this->Bezeichner == compare.Bezeichner; } CFoo(string bez) { Bezeichner = bez; } }
list<CFoo> neFooListe;
find(neFooListe.begin(), neFooListe.end(), CFoo("I seek you"));
|
Das funktionierte soweit auch ganz gut. Jetzt trat aber in einem anderen Zusammenhang ein fehler auf, den ich zuvor schon vermutete und zwar mit einer kleinen Zeiger Referenz:
Eine weitere Klasse, wir nennen sie CFooObserver, besitzt einen Zeiger auf einzelne CFoo Objekte. Das Problem ist, dass bei der list<CFoo>.push_back() Operation eine Kopie des Objektes angelegt wird und nicht das Objekt selbst in die Liste aufgenommen wird. Dass das nicht schön ist, wenn ich mit Zeiger Referenzen arbeite sollte kar sein.
Alles halb so wild dachte ich mir, man mache aus der list<CFoo> einfach eine list<CFoo*> und der berühmte Käs' ist gegessen. Mein Code sieht jetzt wie folgt aus:
Code: |
Class CFoo { public: string Bezeichner; }
bool opertaor==(CFoo* foo1, CFoo* foo2) { return foo1->Bezeichner == foo2->Bezeichner; } list<CFoo*> neFooListe;
find(neFooListe.begin(), neFooListe.end(), &CFoo("I seek you"));
|
Die Cracks unter euch haben bestimmt schon aufgeschrien und können den Compiler Error vor'm geistigen Auge sehen ohne, dass ich ihn in den Mund genommen habe, aber ich habe keine Ahnung warum mein Compiler folgendes ausspuckt und wie ich einen passenden Workaround für mein Problem angehen kann:
error: bool opertaor==(CFoo*, CFoo*) must have an argument of class or enumrated type
Any suggestions?
Gruesse
Daniel |