"<"-Operator überladen



  • Danke ihr beiden erstmal für eure schnellen Antworten 😉

    Die Sache mit den Adressen leuchtet mir jetzt ein, das Problem ist nur, dass wenn ich den Operator so

    if (*a < *b) ... ;
    

    aufrufe, dann meint der compiler

    no match für "operator<" in "*a < *b"
    

    Das Problem ist halt, dass ich nur Zeiger auf die Klassen hernehmen kann und relativ einfache Aufrufe brauche...



  • Deklariere operator< mit const Key &rhs dann müsste es klappen.

    Alternativ könnte die Überladung von ::operator<(Key *a, Key *b) klappen...



  • LordJaxom schrieb:

    Alternativ könnte die Überladung von ::operator<(Key *a, Key *b) klappen...

    unwahrscheinlich, daß der compiler das zuläßt. wenn man damit anfängt, kommt motgen einer und überlädt den op< für integers.



  • Stimmt, geht nicht... War davon abgesehen ein unschöner Vorschlag 🙂



  • Hallo nochmal,

    hab jetzt mal versucht, euren Vorschlag

    bool operator<(const Key& compKey) {
    if (strcmp(key, compKey.getKey()) < 0) return true;
        else return false;
    }
    

    bei mir einzubauen, aber meinem Compiler hat das überhaupt nicht gefallen ("Übergabe als this-Argument streicht Qualifizierer", oder so ähnlich). Jetzt habe ich festgestellt, dass das Problem offensichtlich darin liegt, dass die Variable "key", die klassenintern den Hash-Wert speichert, bei mir privat ist, und ich darauf per "getKey()" zugreife. Wenn ich sie dagegen public deklariere und innerhalb des Operators direkt darauf zugreife, funktioniert alles:

    strcmp(key, compKey.key)
    

    Allerdings hätte ich schon gerne, dass man den Wert von außen nicht ohne weiteres ändern kann. Gibt's da vielleicht einen Weg?

    Vielen Dank aber schon jetzt für eure Hilfe, das hat mich schon jetzt sehr viel weiter gebbracht...



  • class Key
    {
       ...
       private:
          char *key;
    
       ...
       public:
          bool operator<(const Key &t_key) { return strcmp(key, t_key.key) < 0 ? true : false; }
       ...
    };
    

    mein compiler macht da keinen stress.

    Meep Meep



  • Hm, hab wohl gedacht, dass

    compKey.key
    

    hier nicht gehen würde, weil "compKey" eine andere Instanz sei und man deshalb von hier aus nicht auf deren private variable "key" zugreifen könne.

    Tja, und ich dachte, ich hätte alles ausprobiert... So läuft es jedenfalls bei mir auch. Vielen Dank nochmal an alle, ist ein wirklich tolles Forum!!


  • Mod

    Meep Meep schrieb:

    class Key
    {
       ...
       private:
          char *key;
       
       ...
       public:
          bool operator<(const Key &t_key) { return strcmp(key, t_key.key) < 0 ? true : false; }
       ...
    };
    

    mein compiler macht da keinen stress.

    Meep Meep

    sollte er auch nicht. allerdings gibt es keinen grund, dass dieser operator non-const ist. und auf das

    x?true:false
    

    idiom können wir nun wirklich verzichten 😉



  • camper schrieb:

    und auf das

    x?true:false
    

    idiom können wir nun wirklich verzichten 😉

    stimmt.
    es muss

    return !!(strcmp(key, t_key.key) < 0);
    

    heißen.



  • Warum nicht

    return !((strcmp(key, t_key.key) < 0) ? false : true)
    


  • LordJaxom schrieb:

    Warum nicht

    return !((strcmp(key, t_key.key) < 0) ? false : true)
    

    weil es nicht notwendig ist, das zweimal zu machen.



  • Achso, verstehe 😉


Anmelden zum Antworten