Operator Problem. Operator mehrmals includen.
-
Tagchen !
Zum Speichern mehrerer Strukturen vom Typ meineStruktur, die unterschiedliche Datentypen beinhaltet, benutze ich die Klasse list der STL.
Nach mehrtägigem Forschen und Rumprobieren ist es mir gelungen, einen globalen
operator< fürs Sortieren zu basteln.Diesen operator< habe ich in einer, nennen wir sie mal aufgrund irrwitzigen
Zeitaufwandes, fukkin_operator.h - Datei deklariert und gleichzeitig definiert:// fukkin_operator.h #ifndef _FUKKIN_OPERATOR_H #define _FUKKIN_OPERATOR_H BOOL operator < (const meineStruktur& a ,const meineStruktur& b) { Pseudo-Code: vergleiche alle Datentypen von a und b und liefere entsprechend TRUE oder FALSE; } #endif // _FUKKIN_OPERATOR_HWenn ich nun diese fukkin_operator.h - Datei mit #include in eine
Klasse_1.cpp - Datei einbinde,// Klasse_1.cpp ... #include "fukkin_operator.h" ... Klasse__1::IrgendeineFunktion() { list <meineStruktur> Liste; ... Liste.sort(); } ...funktioniert das Sortieren der Liste tadellos

( freu, jubel, jauchz, mirselbstaufdieschulterklopf )Und jetzt kommt der Karton:
- Karton Einleitung:
Ich tu die fukkin_operator.h - Datei auch in Klasse_2.cpp includieren tun.
Klasse_1.cpp und Klasse_2.cpp sind Bestandteile eines Projekts und mehr oder
weniger voneinander abhängig.
Klasse_1.cpp und Klasse_2.cpp hat also #include fukkin_operator.h- Karton Definition/Erklärung:
Klasse_2.obj:error: "int __cdecl operator<(struct meineStruktur const
&,struct meineStruktur const &)" (??M@YAHABUmeineStruktur@@0@Z) bereits in
Klasse_1.obj definiert.- Karton Resultat: :-(((
Wenn der Compiler also schon merkt, das der Operator bereits definiert ist, wieso gibt er sich denn nicht mit meinem schönen Operator zufrieden, wieso meckert die Tröte dann überhaupt rum ?
Hab versucht den Operator extern zu deklarieren, funzt auch nicht. *grummel*
Schaue heute abend wieder rein,
MfG
pro ggingmania
-
Hallo,
du hast zwei Möglichkeiten:
a) du deklarierst den Operator inline:// FREAKIN_operator.h #ifndef _FREAKIN_OPERATOR_H #define _FREAKIN_OPERATOR_H inline BOOL operator < (const meineStruktur& a ,const meineStruktur& b) { Pseudo-Code: vergleiche alle Datentypen von a und b und liefere entsprechend TRUE oder FALSE; } #endif // _FREAKIN_OPERATOR_Hb) du definierst den Operator in genau einer Übersetzungseinheit:
// FREAKIN_operator.h #ifndef _FREAKIN_OPERATOR_H #define _FREAKIN_OPERATOR_H // Deklaration im Header BOOL operator < (const meineStruktur& a ,const meineStruktur& b); #endif // _FREAKIN_OPERATOR_H // FREAKIN_operator.cpp #include "FREAKIN_operator.h" // Definition in einer cpp-Datei BOOL operator < (const meineStruktur& a ,const meineStruktur& b) { ... }Weitere Informationen findest du hier:
http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&faq=ODR#Answ
-
Vielen Dank für die schnelle Antwort.
Die zweite Möglichkeit gefällt mir am besten, dabei gibt es leider folgende
Fehlermeldungen:MIST_operator.h(7) : error C2143: Syntaxfehler : Fehlendes ',' vor '&'
MIST_operator.h(7) : error C2059: Syntaxfehler : '&'
MIST_operator.h(7) : error C2803: Operator '<' muss mindestens einen formalen Parameter vom Typ Klasse haben
MIST_operator.h(7) : error C2805: Binaerer Operator '<' hat zu wenig Parameter
-
Deine erste Möglichkeit ( inline ) funktioniert super !
Noch einmal besten Dank !!!!
LG,
proggingmania
-
// SUPER_KLASSE_operator.h #ifndef _SUPER_KLASSE_OPERATOR_H #define _SUPER_KLASSE_OPERATOR_H inline BOOL operator < (const meineStruktur& a ,const meineStruktur& b) { Pseudo-Code: vergleiche alle Datentypen von a und b und liefere entsprechend TRUE oder FALSE; } #endif // _SUPER_KLASSE_OPERATOR_Hjippieeeeeeeeeeeeeeeeeeeeeee dankääääääääääääää