operator-Funktionen



  • Hallo.
    Irgendwie habe ich Schwierigkeiten bei der Definition von operator -Funktion. Wenn ich diese in der Hauptdatei definiere, dann klappt alles, aber wenn ich sie in der Header-Datei definiere bekomme ich Errors ueber Errors 🙂
    Die Frage: Warum?

    Gruss
    Cartman



  • Eric Cartman schrieb:

    Die Frage: Warum?

    Gegenfrage: Welche? (Verwendest du keine Include-Guards?)



  • franz schrieb:

    Eric Cartman schrieb:

    Die Frage: Warum?

    Gegenfrage: Welche? (Verwendest du keine Include-Guards?)

    Wenn ich sie in einer CPP-Datei definiere:

    "std::_String_iterator<_Elem,_Traits,_Alloc> std::operator +(_String_iterator<_Elem,_Traits,_Alloc>::difference_type,std::_String_iterator<_Elem,_Traits,_Alloc>)": template-Argument für "std::_String_iterator<_Elem,_Traits,_Alloc>" konnte nicht von "Rational" hergeleitet werden.

    plus aehnliche...

    Wenn ich sie in einer H-Datei definiere, erhalte ich einen Linkerfehler:

    error LNK2005: "class Rational __cdecl operator+(class Rational const &,class Rational const &)" (??H@YA?AVRational@@ABV0@0@Z) ist bereits in main.obj definiert.

    wenn ich sie in der MAIN.CPP definiere, laeuft alles wunderbar.
    Die Funktion sieht so aus:

    Rational operator+(const Rational& r1, const Rational& r2)
    {
    	return Rational(r1.getZaehler()*r2.getNenner()+r2.getZaehler()*r1.getNenner(),
    		r1.getNenner()*r2.getNenner());
    }
    

    Also voellig harmlos, eigtl. 😕



  • Eric Cartman schrieb:

    error LNK2005: "class Rational __cdecl operator+(class Rational const &,class Rational const &)" (??H@YA?AVRational@@ABV0@0@Z) ist bereits in main.obj definiert.

    wenn ich sie in der MAIN.CPP definiere, laeuft alles wunderbar.

    Die Meldung sagt eigentlich, dass operator+ schon in der main steht. Hast du bei deinen Versuchen vergessen, die operator+ in der main.cpp auszukommentieren, als du sie in den Header gelegt hast?
    Falls nein, kannst du es ja mal mit nem make clean versuchen.



  • franz schrieb:

    Eric Cartman schrieb:

    error LNK2005: "class Rational __cdecl operator+(class Rational const &,class Rational const &)" (??H@YA?AVRational@@ABV0@0@Z) ist bereits in main.obj definiert.

    wenn ich sie in der MAIN.CPP definiere, laeuft alles wunderbar.

    Die Meldung sagt eigentlich, dass operator+ schon in der main steht. Hast du bei deinen Versuchen vergessen, die operator+ in der main.cpp auszukommentieren, als du sie in den Header gelegt hast?
    Falls nein, kannst du es ja mal mit nem make clean versuchen.

    Nein, das ist es leider nicht. Also liegt es wohl am Compiler? (MSVC2008Express)



  • Eric Cartman schrieb:

    Nein, das ist es leider nicht. Also liegt es wohl am Compiler? (MSVC2008Express)

    Nein, du hast vermutlich die Elementfunktion im Header außerhalb der Klasse definiert. Dadurch landet sie wohl vermutlich mehrmals in den Übersetzungseinheiten:

    Abhilfe: http://c-plusplus.net/forum/viewtopic-var-p-is-1666763.html#1666763
    Anmerkung: Wenn du die Elementfunktion in der Klassendefinition definierst, ist sie implizit inline.



  • @KasF
    War zwar keine Elementfunktion, aber bin dadurch auf die Loesung gekommen. Deklaratin in der Header-Datei und Definition in der entsprechenden CPP-Datei... sowas muss ich mir echt mal merken 🙂 danke fuer die Hilfe

    Gruss
    Cartman


Anmelden zum Antworten