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 ...