<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Operator &#x27;|=&#x27; mit enum benutzen]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe einen Enum, welcher Flags enthält und möchte ihn nun mit dem Operator '|=' benutzen. Leider meckert da der Compiler, &quot;error C2676: binary '|=' : 'TraceDir' does not define this operator or a conversion to a type acceptable to the predefined operator&quot; in folgendem Code:</p>
<pre><code class="language-cpp">enum TraceDir {
    Left = 1,
    Top = 2,
    Diagonally = 4
};

TraceDir x = Left;
x |= Top;
</code></pre>
<p>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:</p>
<pre><code class="language-cpp">TraceDir&amp; operator |=(TraceDir&amp; lhs, const TraceDir&amp; rhs)
{
    lhs = TraceDir(lhs | rhs);
    return lhs;
}
</code></pre>
<p>Leider schreit dann der Linker: &quot;error LNK2005: &quot;enum TraceDir &amp; __cdecl operator|=(enum TraceDir &amp;,enum TraceDir const &amp;)&quot; (??_5bioinf@madrat@@YAAAW4TraceDir@01@AAW4201@ABW4201@@Z) already defined in alignment.obj main.obj&quot; (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).</p>
<p>Wie kann ich das Problem beheben?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/125947/operator-mit-enum-benutzen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 13:56:48 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/125947.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 10 Nov 2005 17:18:11 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Operator &#x27;|=&#x27; mit enum benutzen on Thu, 10 Nov 2005 17:18:11 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe einen Enum, welcher Flags enthält und möchte ihn nun mit dem Operator '|=' benutzen. Leider meckert da der Compiler, &quot;error C2676: binary '|=' : 'TraceDir' does not define this operator or a conversion to a type acceptable to the predefined operator&quot; in folgendem Code:</p>
<pre><code class="language-cpp">enum TraceDir {
    Left = 1,
    Top = 2,
    Diagonally = 4
};

TraceDir x = Left;
x |= Top;
</code></pre>
<p>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:</p>
<pre><code class="language-cpp">TraceDir&amp; operator |=(TraceDir&amp; lhs, const TraceDir&amp; rhs)
{
    lhs = TraceDir(lhs | rhs);
    return lhs;
}
</code></pre>
<p>Leider schreit dann der Linker: &quot;error LNK2005: &quot;enum TraceDir &amp; __cdecl operator|=(enum TraceDir &amp;,enum TraceDir const &amp;)&quot; (??_5bioinf@madrat@@YAAAW4TraceDir@01@AAW4201@ABW4201@@Z) already defined in alignment.obj main.obj&quot; (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).</p>
<p>Wie kann ich das Problem beheben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/914151</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/914151</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Thu, 10 Nov 2005 17:18:11 GMT</pubDate></item><item><title><![CDATA[Reply to Operator &#x27;|=&#x27; mit enum benutzen on Thu, 10 Nov 2005 17:44:31 GMT]]></title><description><![CDATA[<p>Schlag mal unter <em>inline</em> nach, oder pack die Implementierung in alignment.cpp ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/914166</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/914166</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Thu, 10 Nov 2005 17:44:31 GMT</pubDate></item></channel></rss>