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?


Log in to reply