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.html

    Es reicht natürlich nicht nur 2 Argumtente zu übergeben. Du musst die Funktionsdeklaration natürlich auch dementsprechend ändern.
    Durch das, dass du die Funktion friend deklarierst, 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::string unterstü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!


Anmelden zum Antworten