UND operator ( operator&(...) )
-
was ist GotW? Global ist immer so unschön...
-
- Global ist hier schön

- http://www.gotw.ca/ dort gibts einen schönen Artikel darüber warum das so sein soll.
MfG SideWinder
- Global ist hier schön
-
Nein, du kannst ihn auch als Klassenmember überladen, wenn du darauf bestehst (aber ich empfehle dir mal, die Antworten zu deinen früheren Fragen genauer durchzulesen - das haben wir dir alles schon mehrfach erklärt ;)). Binäre Operatoren definierst du entweder als globale Funktion mit zwei Parametern (in der Reihenfolge linker und rechter Operand oder als Methode mit einem Parameter (linker Operand ist *this, rechter Operand der übergebene Parameter), unäre Operatoren global mit einem Parameter oder als parameterlose Methode - da die unterschiedliche Parameterlisten haben, können sie sich gar nicht in die Quere kommen.
(einzige Besonderheit sind Inkrement und Dekrement - weil es davon zwei unäre Versionen gibt, bekommt der Postfix-Operator noch einen dummy-int-Parameter zur Unterscheidung)
-
hast der globale Binär Operator einen rückgabe wert? muss ja oder ? das ergenbis?
-
BorisDieKlinge schrieb:
hast der globale Binär Operator einen rückgabe wert? muss ja oder ? das ergenbis?
Meinst du das ernst?
-
ja ich weis ne waage frage... peinlich.
Meine Anahme:
foo A{ foo& operator=(const foo &Scr){...} }; foo& operator& (const foo l&, const &r){...}wenn ich nun:
foo a,b,c; a= b & c;mache, wird für "b&c" der globale UND operator verwendet, und das temporäre obejket dessen rügabe mit =operatoren zugewiesen!
-
BorisDieKlinge schrieb:
hast der globale Binär Operator einen rückgabe wert? muss ja oder ? das ergenbis?
Sollte er zumindest, wenn du ihn nutzen willst
(btw ist es besser, wenn er sein Ergebnis per Wert (oder zumindest als const-Referenz) zurückgibt)
-
ok habe den operator global, aller ding kommt dann fehlermeldung
1. multithread error LNK2005: "class CRouteOptions & __cdecl operator&(class CRouteOptions const &,class CRouteOptions const &)" (??I@YAAAVCRouteOptions@@ABV0@0@Z) already defined in multithread.obj
2. multithread fatal error LNK1169: one or more multiply defined symbols found
Code (Vereinfacht);
class CRouteOptions{ CRouteOptions(..); CRouteOptions(const CRouteOptions &oScr); CRouteOptions& CRouteOptions::operator=(const CRouteOptions &oScr); . . . }; //Global CRouteOptions& operator& (const CRouteOptions &lScr, const CRouteOptions &rScr){ }
-
Lern doch bitte mal die Grundlagen von C++...
Setz entweder ein inline davor oder pack die Implementierung in eine Code-Datei.
-
Da hast du Probleme mit der ODR (One Definition Rule)
Entweder du kennzeichnest den operator als inline oder du lagerst die Definition in eine eigene CPP-Datei aus (in den Header gehört dann nur der Prototyp).PS: Auch wenn man sich normalerweise nicht selbst zitieren sollte:
CStoll schrieb:
(btw ist es besser, wenn er sein Ergebnis per Wert (oder zumindest als const-Referenz) zurückgibt)
-
danke
