<?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+]]></title><description><![CDATA[<p>Hi,</p>
<p>ich möchte folgendes aufrufen:</p>
<pre><code class="language-cpp">DT_String u, v = &quot;Hallo&quot;, w = &quot;Welt!&quot;;
u = v + w;
</code></pre>
<pre><code class="language-cpp">// Zuweisungs-Operatoren
public:
	DT_String&amp;		operator=(const char* apsString);
	DT_String&amp;		operator=(DT_String&amp; apcString);
	DT_String&amp;		operator=(long alValue);

// Addition-Operator
public:
	DT_String		operator+(const char* apsString);
	DT_String		operator+(DT_String&amp; apcString);
	DT_String		operator+(long alValue);
</code></pre>
<p>Bekomme aber folgende Fehlermeldung:</p>
<blockquote>
<p>error C2593: 'operator =' is ambiguous, could be 'DT_String &amp;DT_String::operator =(long)' or 'DT_String &amp;DT_String::operator =(const char *)' ..<br />
while trying to match the argument list '(DT_String, DT_String)'</p>
</blockquote>
<p>Was mache ich hier falsch? <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>
]]></description><link>https://www.c-plusplus.net/forum/topic/124976/operator</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 03:28:57 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/124976.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 02 Nov 2005 12:55:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to operator+ on Wed, 02 Nov 2005 12:55:35 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich möchte folgendes aufrufen:</p>
<pre><code class="language-cpp">DT_String u, v = &quot;Hallo&quot;, w = &quot;Welt!&quot;;
u = v + w;
</code></pre>
<pre><code class="language-cpp">// Zuweisungs-Operatoren
public:
	DT_String&amp;		operator=(const char* apsString);
	DT_String&amp;		operator=(DT_String&amp; apcString);
	DT_String&amp;		operator=(long alValue);

// Addition-Operator
public:
	DT_String		operator+(const char* apsString);
	DT_String		operator+(DT_String&amp; apcString);
	DT_String		operator+(long alValue);
</code></pre>
<p>Bekomme aber folgende Fehlermeldung:</p>
<blockquote>
<p>error C2593: 'operator =' is ambiguous, could be 'DT_String &amp;DT_String::operator =(long)' or 'DT_String &amp;DT_String::operator =(const char *)' ..<br />
while trying to match the argument list '(DT_String, DT_String)'</p>
</blockquote>
<p>Was mache ich hier falsch? <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>
]]></description><link>https://www.c-plusplus.net/forum/post/906398</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/906398</guid><dc:creator><![CDATA[Tanzfreak]]></dc:creator><pubDate>Wed, 02 Nov 2005 12:55:35 GMT</pubDate></item><item><title><![CDATA[Reply to operator+ on Wed, 02 Nov 2005 13:05:22 GMT]]></title><description><![CDATA[<p>Hast du eventuell einen DT_String::operator long() definiert (explizite Typumwandlung)? Ansonsten könntest du auch versuchen, den Parameter von operator+ und operator= als &quot;const DT_String&amp;&quot; zu deklarieren - außer du hast wirklich vor, deinen Parameter zu verändern.</p>
<p>(achja: In welcher Zeile tritt denn der Fehler auf?)</p>
<p>*etwas länger hinsieht* operator=(DT_String&amp; kann nicht angewendet werden, weil der Compiler keine nicht-konstante Referenz an eine temporäre Variable binden kann (und der Rückgabewert von op+ ist eine temporäre Variable, selbst wenn die rausoptimiert werden kann).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/906404</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/906404</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 02 Nov 2005 13:05:22 GMT</pubDate></item><item><title><![CDATA[Reply to operator+ on Wed, 02 Nov 2005 13:13:02 GMT]]></title><description><![CDATA[<blockquote>
<p>Hast du eventuell einen DT_String::operator long() definiert (explizite Typumwandlung)?</p>
</blockquote>
<p>Ja, hab ich. Wenn ich's raushaue, dann funktioniert's.</p>
<p>Merci</p>
]]></description><link>https://www.c-plusplus.net/forum/post/906412</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/906412</guid><dc:creator><![CDATA[Tanzfreak]]></dc:creator><pubDate>Wed, 02 Nov 2005 13:13:02 GMT</pubDate></item><item><title><![CDATA[Reply to operator+ on Wed, 02 Nov 2005 13:18:48 GMT]]></title><description><![CDATA[<p>Beste Lösung dürfte tatsächlich sein, die &quot;internen&quot; Operatoren mit konstanten Strings zu definieren:</p>
<pre><code class="language-cpp">DT_String&amp; operator=(const DT_String&amp; other);
DT_String  operator+(const DT_String&amp; other) const;
</code></pre>
<p>Der nichtkonstante Zuweisungsoperator kann in deinem Beispiel nicht angewendet werden, weil der Compiler davon ausgehen muß, daß du den Parameter ändern willst - und den Rückgabewert von op+ kannst du nicht ändern (bzw. hat das keine Auswirkungen, da das Objekt sich sofort nach der Zuweisung selbst vernichtet). Also sucht der Compiler nach &quot;Umwegen&quot; - einer führt über eine char*-Konvertierung zu op=(const char*), der andere über eine long-Konvertierung zu op=(long) - da beide Wege gleich gut sind, steht er vor einer Patt-Situation.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/906416</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/906416</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 02 Nov 2005 13:18:48 GMT</pubDate></item></channel></rss>