Operator '|=' mit enum benutzen



  • Hallo,

    ich habe einen Enum, welcher Flags enthält und möchte ihn nun mit dem Operator '|=' benutzen. Leider meckert da der Compiler, "error C2676: binary '|=' : 'TraceDir' does not define this operator or a conversion to a type acceptable to the predefined operator" in folgendem Code:

    enum TraceDir {
        Left = 1,
        Top = 2,
        Diagonally = 4
    };
    
    TraceDir x = Left;
    x |= Top;
    

    Ein Blick in den Stroustrup hat mit verraten, dass eine explizite Konversion erforderlich wäre -- nur dazu müsste ich dann 'x = TraceDir(x | Top)' schreiben, was mir viel zu lang(sam) ist. Daher dachte ich mir, ich könne den Operator '|=' evtl. selbst für das Enum implementieren:

    TraceDir& operator |=(TraceDir& lhs, const TraceDir& rhs)
    {
        lhs = TraceDir(lhs | rhs);
        return lhs;
    }
    

    Leider schreit dann der Linker: "error LNK2005: "enum TraceDir & __cdecl operator|=(enum TraceDir &,enum TraceDir const &)" (??_5bioinf@madrat@@YAAAW4TraceDir@01@AAW4201@ABW4201@@Z) already defined in alignment.obj main.obj" (Das Enum und der Operator sind in 'alignment.hpp' definiert, welches sowohl in alignment.cpp als auch main.cpp eingefügt worden ist, allerdings *innerhalb* von include guards, daher sollte es nicht zu einer doppelten Definition kommen).

    Wie kann ich das Problem beheben?



  • Schlag mal unter inline nach, oder pack die Implementierung in alignment.cpp ...


Anmelden zum Antworten