UND operator ( operator&(...) )



    1. Global ist hier schön 😉
    2. http://www.gotw.ca/ dort gibts einen schönen Artikel darüber warum das so sein soll.

    MfG SideWinder



  • 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 🙂


Anmelden zum Antworten