STLPort Problem mit operator <
-
Hallo,
ich benutze MSVC++ 6.0 IDE und die neueste Version des STL Ports von SGI. Wenn ich nun folgenden Code produziere, erscheint der Fehler, dass er innerhalb von
der Klasse "class AAA" keinen "operator <" findet:#include <list> class AAA { public: int a; AAA(int a) {this->a = a;} bool operator <(const AAA& left) {return this->a < left.a;} }; int main() { std::list<AAA> liste; liste.push_back(AAA(3)); liste.push_back(AAA(2)); liste.push_back(AAA(1)); liste.sort(); //<--Initiator der Fehlermeldung return 0; }
Folgender Code wird aber ordentlich compiliert und ausgeführt:
#include <list> class AAA { public: int a; AAA(int a) {this->a = a;} }; bool operator <(const AAA& right, const AAA& left) {return right.a < left.a;} int main() { std::list<AAA> liste; liste.push_back(AAA(3)); liste.push_back(AAA(2)); liste.push_back(AAA(1)); liste.sort(); //<--Keine Fehlermeldung mehr return 0; }
Warum lässt sich die erste Version nicht anständig compilieren???
Grüße
Cpp-Coder
-
Weil der op global zu sein hat. Denn wenn du ihn zu einem Member machst, machen viele Leute den Fehler den du auch gemacht hast: kleiner Tip: welchen Typ hat *this in deinem op<?
this muesste den Typen AAA const* haben, tatsaechlich hat es aber den Typen AAA*
Anmerkung:
In wirklichkeit muss this natuerlich auch noch ein konstanter Zeiger sein, das tut hier aber nix zur Sache.
-
bool operator <(const AAA& right, const AAA& left)
hast du da rechts und links vertauscht?
-
ergo: die msvc++ 6.0 implementation der STL ist buggy, da der erste codeabschnitt damit funktioniert.
@"off topic", you're rigth, but off topic
-
Weil der op global zu sein hat.
Wieso eigentlich?