vergleichsoperator überladen
-
Hallo Communuty!
Ich soll eine Klasse student schreiben und einen Vergleichsoperator hinzufügen der die matrikelnummer zweier Objekte vergleicht.
Ich bekomme eine Fehlermeldung "âbool operator==(const student&)â must take exactly two arguments". Wenn ich meinem Operatoe 2 Argumente übergebe bekomme ich auch eine Fehlermeldung.Habt Ihr ne Idee was ich falsch mache?
Lg Caro
#include<iostream> #include<string> using namespace std; class student{ private: string vorname; string nachname; string matrikelnummer; public: student(string v,string n, string m) // Konstruktor :vorname(v),nachname(n),matrikelnummer(m) {}; string get_matrikelnummer(); // Funktion die Matrikelnummer ausgibt // Vergleichsoperator friend bool operator==(const student &a); // Ausgabeoperator friend ostream& operator<< (ostream& stream, student&); }; ostream& operator<< (ostream& stream, student& s) { stream << s.vorname << " , " << s.nachname << " , " << s.matrikelnummer << endl; } bool operator== (const student &a) { return strcmp(matrikelnummer,a.matrikelnummer)==0; } int main() { student a("Hans","Meier","12345"); student b("Lilli","Baum","&&&&&"); cout << a; return 0;}[cli]
-
Schau mal hier in dem Artikel:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-232010.htmlEs reicht natürlich nicht nur 2 Argumtente zu übergeben. Du musst die Funktionsdeklaration natürlich auch dementsprechend ändern.
Durch das, dass du die Funktionfrienddeklarierst, gibt es kein "aktuelles" Objekt und du musst beide übergeben.btw:
return strcmp(matrikelnummer,a.matrikelnummer)==0;Warum nicht gleich:
return matrikelnummer == a.matrikelnummer;std::stringunterstützt den==-Operator.
Ist natürlich wegen dem friend immernoch nicht ganz korrekt, aber es fehlt nicht mehr viel.
-
Ich hab mir das mit den Operatoren durchgelesen und versucht das in meine Klasse einzubauen...leider kommt immer noch der Fehler...ich weiss gerade auch nicht wirklich was ich da falsch mache.
#include<iostream> #include<string> using namespace std; class student{ private: string vorname; string nachname; string matrikelnummer; public: student(string v,string n, string m) // Konstruktor :vorname(v),nachname(n),matrikelnummer(m) {}; string get_matrikelnummer(); // Funktion die Matrikelnummer ausgibt bool operator==(student const& a, student const& b) {return &a.matrikelnummer == &b.matrikelnummer;} // Ausgabeoperator friend ostream& operator<< (ostream& stream, student&); }; ostream& operator<< (ostream& stream, student& s) { stream << s.vorname << " , " << s.nachname << " , " << s.matrikelnummer << endl; } int main() { student a("Hans","Meier","12345"); student b("Lilli","Baum","&&&&&"); cout << a; return 0; }
-
Wo ist denn jetzt der friend hin?
{return a.matrikelnummer == b.matrikelnummer;}Du musst da kein &-Operator angeben.
-
jetzt gehts...danke!