<?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[Überladungen von Operatoren]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich hab das Problem, dass ich von den nativen Datentypen abstrahieren muss und mich dazu entschieden dass über Klassen zu machen.</p>
<p>Dummerweise habe ich mit der Überladung der Operatoren ein Problem.</p>
<p>Ich hab folgende Klasse für unsigned int definiert:</p>
<pre><code class="language-cpp">class UnsignedInt
{
public:
	UnsignedInt(void);
	UnsignedInt(const unsigned int value);

	UnsignedInt&amp; operator = (unsigned int value);
	UnsignedInt&amp; operator = (UnsignedInt &amp;var);
...
	bool operator == (UnsignedInt var) const;
...

	// cast operatoren
	operator unsigned int() const;

	operator Integer() const;
	operator Float() const;
	operator UnsignedInt() const;
	operator Short() const;
	operator UnsignedShort() const;
	operator Long() const;
	operator UnsignedLong() const;
	operator Double() const;
	operator LongDouble() const;
	operator Char() const;
	operator UnsignedChar() const;

private:
	unsigned int value;

	friend std::ostream&amp; operator &lt;&lt; (std::ostream &amp;os, const UnsignedInt &amp;var);
	friend std::istream&amp; operator &gt;&gt; (std::istream &amp;is, UnsignedInt &amp;var);
};
</code></pre>
<p>Das Problem ist jetzt, dass wenn ich im Code sowas habe<br />
UnsignedInt ui = 5;<br />
...<br />
if (ui == 5)<br />
{...}<br />
...</p>
<p>Dann bekomm ich die Complier-Meldung<br />
error C2666: 'UnsignedInt::operator`=='': 2 Überladungen haben ähnliche Konvertierungen</p>
<p>Ich hab allerdings nur einen == Oprator definiert. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Die einfachste Lösung für das Problem ist sicherlich ein<br />
if (ui == (UnsignedInt) 5)<br />
aber es muss doch auch möglich sein, das anders zu lösen.</p>
<p>Hat einer eine Idee wie ich das hinbekommen kann?</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/132731/überladungen-von-operatoren</link><generator>RSS for Node</generator><lastBuildDate>Thu, 27 Aug 2026 17:10:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/132731.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 12 Jan 2006 16:47:39 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Überladungen von Operatoren on Thu, 12 Jan 2006 16:47:39 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich hab das Problem, dass ich von den nativen Datentypen abstrahieren muss und mich dazu entschieden dass über Klassen zu machen.</p>
<p>Dummerweise habe ich mit der Überladung der Operatoren ein Problem.</p>
<p>Ich hab folgende Klasse für unsigned int definiert:</p>
<pre><code class="language-cpp">class UnsignedInt
{
public:
	UnsignedInt(void);
	UnsignedInt(const unsigned int value);

	UnsignedInt&amp; operator = (unsigned int value);
	UnsignedInt&amp; operator = (UnsignedInt &amp;var);
...
	bool operator == (UnsignedInt var) const;
...

	// cast operatoren
	operator unsigned int() const;

	operator Integer() const;
	operator Float() const;
	operator UnsignedInt() const;
	operator Short() const;
	operator UnsignedShort() const;
	operator Long() const;
	operator UnsignedLong() const;
	operator Double() const;
	operator LongDouble() const;
	operator Char() const;
	operator UnsignedChar() const;

private:
	unsigned int value;

	friend std::ostream&amp; operator &lt;&lt; (std::ostream &amp;os, const UnsignedInt &amp;var);
	friend std::istream&amp; operator &gt;&gt; (std::istream &amp;is, UnsignedInt &amp;var);
};
</code></pre>
<p>Das Problem ist jetzt, dass wenn ich im Code sowas habe<br />
UnsignedInt ui = 5;<br />
...<br />
if (ui == 5)<br />
{...}<br />
...</p>
<p>Dann bekomm ich die Complier-Meldung<br />
error C2666: 'UnsignedInt::operator`=='': 2 Überladungen haben ähnliche Konvertierungen</p>
<p>Ich hab allerdings nur einen == Oprator definiert. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Die einfachste Lösung für das Problem ist sicherlich ein<br />
if (ui == (UnsignedInt) 5)<br />
aber es muss doch auch möglich sein, das anders zu lösen.</p>
<p>Hat einer eine Idee wie ich das hinbekommen kann?</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/964781</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/964781</guid><dc:creator><![CDATA[ADOOM]]></dc:creator><pubDate>Thu, 12 Jan 2006 16:47:39 GMT</pubDate></item><item><title><![CDATA[Reply to Überladungen von Operatoren on Thu, 12 Jan 2006 16:53:09 GMT]]></title><description><![CDATA[<p>Ich denke das Problem ist der implizite Operator==, dessen Signatur</p>
<pre><code class="language-cpp">bool operator==(const Type&amp; obj) const;
</code></pre>
<p>ist. Demnach hat deine Klasse einen impliziten operator==(const UnsignedInt&amp;) und einen expliziten operator==(UnsignedInt).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/964785</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/964785</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Thu, 12 Jan 2006 16:53:09 GMT</pubDate></item><item><title><![CDATA[Reply to Überladungen von Operatoren on Thu, 12 Jan 2006 17:05:20 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>Ich denke das Problem ist der implizite Operator==, dessen Signatur</p>
<pre><code class="language-cpp">bool operator==(const Type&amp; obj) const;
</code></pre>
<p>ist. Demnach hat deine Klasse einen impliziten operator==(const UnsignedInt&amp;) und einen expliziten operator==(UnsignedInt).</p>
</blockquote>
<p>Eine Klasse, die implizit einen op== generiert? Mein Compiler macht das nicht...</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/11485">@ADOOM</a>: Der Fehler liegt darin, dass der Compiler sich bei dem Konstrukt</p>
<pre><code class="language-cpp">if (ui == 5)
</code></pre>
<p>nicht entscheiden soll, ob er</p>
<pre><code class="language-cpp">operator unsigned int() const;
</code></pre>
<p>für ui oder</p>
<pre><code class="language-cpp">UnsignedInt(const unsigned int value);
</code></pre>
<p>für 5 aufrufen soll.</p>
<p>Gruß Caipi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/964796</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/964796</guid><dc:creator><![CDATA[Caipi]]></dc:creator><pubDate>Thu, 12 Jan 2006 17:05:20 GMT</pubDate></item><item><title><![CDATA[Reply to Überladungen von Operatoren on Fri, 13 Jan 2006 06:25:50 GMT]]></title><description><![CDATA[<p>Danke Caipi</p>
<p>werd dann hier mal ansetzen und schauen ob ich das so hinbekomme wie ich es mir vorstelle.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/965124</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/965124</guid><dc:creator><![CDATA[ADOOM]]></dc:creator><pubDate>Fri, 13 Jan 2006 06:25:50 GMT</pubDate></item><item><title><![CDATA[Reply to Überladungen von Operatoren on Fri, 13 Jan 2006 09:15:50 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>Ich denke das Problem ist der implizite Operator==</p>
</blockquote>
<p>Es gibt keinen impliziten op== in einer selbstdefinierten Klasse.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/11485">@ADOOM</a><br />
Einen operator UnsignedInt in der Klasse UnsignedInt? Glaubst du nicht, dass das ein bisschen sinnlos ist? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/965227</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/965227</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Fri, 13 Jan 2006 09:15:50 GMT</pubDate></item></channel></rss>