Kleines Problem mit Überladen von Operatoren



  • Hi,
    mich macht diese Sache mit dem Überladen von Operatoren seit paar Tagen total fertig. 😞 Nun möchte ich eine eigene Operatorfunktion schreiben und stoße auf blöde Fehler.

    #include <iostream>
    using namespace std;
    
    class Klasse
    {
    int z;
    public:
        Klasse(int& t) { z = t; }
        bool operator<(Klasse& a, Klasse& b);
    };
    
    bool Klasse::operator<(Klasse& a, Klasse& b) { return (a.z < b.z); }
    
    int main()
    {
      Klasse A(4), B(5);
      if (A < B) cout << "Wahr";
      return 0;
    }
    

    Der DevC++ meldet sowas:

    bool Klasse::operator<(Klasse&, Klasse&)' must take exactly one

    Ich bin inzwischen voll fertig, da mir diese Sache seit 4-5 Tagen nicht in den Kopf rein geht.



  • üblicherweise so:

    #include <iostream> 
    using namespace std; 
    
    class Klasse 
    { 
    int z; 
    public: 
        Klasse(int t) : z(t) {} //Elementinitialisierungsliste (-> google)
        /*
        und keine Referenz, da sonst Probleme mit temp. Variablen.
        bzw wenn mit Referenz, dann Referenz auf const; also:
        Klasse (const int &t) : z(t) {}
        */
        friend bool operator<(const Klasse& a, const Klasse& b); 
    }; 
    
    bool operator<(const Klasse& a, const Klasse& b) { return (a.z < b.z); } 
    
    int main() 
    { 
      Klasse A(4), B(5); //das würde by reference auf nicht const nicht gehen
      if (A < B) cout << "Wahr"; 
      return 0; 
    }
    

    natürlich kannst du operator< auch zum Klassenmember machen, dann ist er aber eine einstellige funktion. wenn du eine methode zum abfragen des wertes hinzufügst, kannst du sogar das friend sparen (und musst/darfst den operator< dann nicht mehr in der klasse deklarieren)



  • Vielen Dank davie, meine Fehler sehe ich jetzt selbst. Das mit Initialisierungsliste kenne ich schon (habe nur nicht aufgepasst bei den Referenzen), ich habe die Klasse nur zum Testen gemacht. Blöd von mir war auch, dass ich das alles schon gelernt habe (auch mit friend) aber naja da muss ich noch paar Tage lang lernen aufm Gebiet "Überladungsfunktionen". Ich glaube das fällt mir schwieriger als damals die Sache mit Zeigern und Referenzen. Habe vor einem Monat mit C++ angefangen und hoffe das ist normal, wenn man solche Problemchen hat, wenn nich dann bin ich wohl doof. 😃



  • Keine Sorge, das ist normal. Als C++ Programmierer kannst (musst?) du ständig lernen, und du wirst vielleicht einmal halbwegs gut AFAIK 😉


Anmelden zum Antworten