Definition von Operatorenüberladung in header nicht möglich?



  • Kann es sein dass eine Definition von Operatorenüberladung direkt im header nicht möglich ist? Zumindest die Streamoperatoren. Ich krieg immer Linker-Fehler. Funktionieren tut es nur wenn ich sie in cpp auslagere, und in header-Datei nur die Deklaration stehen darf.

    Obwohl nur 2-4 Zeilen code finde ich die Auslagerung nicht sinnvoll.



  • inline
    davorschreiben und es geht im header.



  • ah cool danke. Ist das nur bei Operatorenüberladungen so dass sie zur Inlinefunktion werden, wenn ich sie auslagere? Wenn ich eine Memberfunktion innerhalb Klassendefinition definiere, wird sie zur inline, also genau andersrum? Mir ist nur eines klar, dass die Operatorenüberladungen ausserhalb Klassendefinitionen sind.



  • Das gilt für alle Funktionen. Wäre die Funktion oder der Operator nicht inline, würde er die 'One Definition Rule' verletzen. Die Definition befindet sich nämlich dann in allen Dateien, die diese Headerdatei inkludieren. Das meckert dann der Linker an. Die besagte Regel soltlest du dir noch mal genauer angucken. Die ist sehr einfach, aber sehr wichtig.



  • xBlackKnightx schrieb:

    ah cool danke. Ist das nur bei Operatorenüberladungen so dass sie zur Inlinefunktion werden, wenn ich sie auslagere?

    Sie werden dadurch nicht zur Inlinefunktion. Aber im Header werden sie unter Umständen in mehrere Dateien eingebunden - siehe brotbernd.


Anmelden zum Antworten