<?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[warning: reference to local variable ‘result’ returned]]></title><description><![CDATA[<p>Folgenden Code habe ich geschrieben</p>
<pre><code>class Complex {
...
		Complex&amp; operator+=(const Complex &amp;rhs );
		const Complex&amp; operator+(const Complex &amp;rhs );
		Complex&amp; operator-=(const Complex &amp;rhs );
		const Complex&amp; operator-(const Complex &amp;rhs );
...
};
...
Complex&amp; Complex::operator-=(const Complex &amp;rhs ) {
	cout &lt;&lt; a &lt;&lt; &quot; &quot; &lt;&lt; b &lt;&lt; endl;
	cout &lt;&lt; rhs.a &lt;&lt; &quot; &quot; &lt;&lt; rhs.b &lt;&lt; endl;
	a -= rhs.a;
	b -= rhs.b;
	cout &lt;&lt; a &lt;&lt; &quot; &quot; &lt;&lt; b &lt;&lt; endl;

	return *this;
}

const Complex&amp; Complex::operator-(const Complex &amp;rhs ) {
	Complex result = (*this); &lt;--------- Zeile 45
	result -= rhs;  
	return result;
}

Complex&amp; Complex::operator+=(const Complex &amp;rhs ) {
	a += rhs.a;
	b += rhs.b;
	return *this;
}

const Complex&amp; Complex::operator+(const Complex &amp;rhs) {
	Complex result = (*this);
	return result+=rhs;
}

bool Complex::operator==(const Complex &amp;other) const {
	cout &lt;&lt; a &lt;&lt; &quot; == &quot; &lt;&lt; other.a &lt;&lt; &quot; &amp;&amp; &quot; &lt;&lt; b &lt;&lt; &quot; == &quot; &lt;&lt; other.b &lt;&lt; endl;
	return (a == other.a &amp;&amp; b == other.b);
}
...
int main() {
...
	Complex c3(10,10);
	Complex c4(-2,6);
	if( (c3 + c4) == Complex(8,16) )
		cout &lt;&lt; &quot;+ korrekt&quot; &lt;&lt; endl;
	else
		cout &lt;&lt; &quot;+ FALSCH &lt;-----------------&quot; &lt;&lt; endl;

	if( (c3 - c4) == Complex(12,4) )
		cout &lt;&lt; &quot;- korrekt&quot; &lt;&lt; endl;
	else
		cout &lt;&lt; &quot;- FALSCH &lt;-----------------&quot; &lt;&lt; endl;
	return 0;
}
</code></pre>
<p>Wenn ich das dann kompiliere warnt mich der Compiler</p>
<blockquote>
<p>make<br />
g++ -o 2DFourier.o -c 2DFourier.cpp<br />
2DFourier.cpp: In member function ‘const Complex&amp; Complex::operator-(const Complex&amp;)’:<br />
2DFourier.cpp:45: warning: reference to local variable ‘result’ returned<br />
g++ -o 2DFourier 2DFourier.o</p>
</blockquote>
<p>Wenn ich das Programm dann ausführe erhalte ich folgende Ausgabe</p>
<blockquote>
<p>./2DFourier<br />
0 == 8 &amp;&amp; 0 == 16<br />
+ FALSCH &lt;-----------------<br />
10 10<br />
-2 6<br />
12 4<br />
0 == 12 &amp;&amp; 0 == 4<br />
- FALSCH &lt;-----------------</p>
</blockquote>
<p>Dass a und b bei der Rückgabe von &quot;+&quot; jeweils null sind, liegt wohl daran, dass ich in der Operatormethode lokal eine Instanz erzeuge, die dann nicht zurückgegeben werden kann, oder ist es was anderes? Wie kann ich das reparieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/284080/warning-reference-to-local-variable-result-returned</link><generator>RSS for Node</generator><lastBuildDate>Sat, 22 Aug 2026 07:42:52 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/284080.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 25 Mar 2011 10:21:36 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to warning: reference to local variable ‘result’ returned on Fri, 25 Mar 2011 10:21:36 GMT]]></title><description><![CDATA[<p>Folgenden Code habe ich geschrieben</p>
<pre><code>class Complex {
...
		Complex&amp; operator+=(const Complex &amp;rhs );
		const Complex&amp; operator+(const Complex &amp;rhs );
		Complex&amp; operator-=(const Complex &amp;rhs );
		const Complex&amp; operator-(const Complex &amp;rhs );
...
};
...
Complex&amp; Complex::operator-=(const Complex &amp;rhs ) {
	cout &lt;&lt; a &lt;&lt; &quot; &quot; &lt;&lt; b &lt;&lt; endl;
	cout &lt;&lt; rhs.a &lt;&lt; &quot; &quot; &lt;&lt; rhs.b &lt;&lt; endl;
	a -= rhs.a;
	b -= rhs.b;
	cout &lt;&lt; a &lt;&lt; &quot; &quot; &lt;&lt; b &lt;&lt; endl;

	return *this;
}

const Complex&amp; Complex::operator-(const Complex &amp;rhs ) {
	Complex result = (*this); &lt;--------- Zeile 45
	result -= rhs;  
	return result;
}

Complex&amp; Complex::operator+=(const Complex &amp;rhs ) {
	a += rhs.a;
	b += rhs.b;
	return *this;
}

const Complex&amp; Complex::operator+(const Complex &amp;rhs) {
	Complex result = (*this);
	return result+=rhs;
}

bool Complex::operator==(const Complex &amp;other) const {
	cout &lt;&lt; a &lt;&lt; &quot; == &quot; &lt;&lt; other.a &lt;&lt; &quot; &amp;&amp; &quot; &lt;&lt; b &lt;&lt; &quot; == &quot; &lt;&lt; other.b &lt;&lt; endl;
	return (a == other.a &amp;&amp; b == other.b);
}
...
int main() {
...
	Complex c3(10,10);
	Complex c4(-2,6);
	if( (c3 + c4) == Complex(8,16) )
		cout &lt;&lt; &quot;+ korrekt&quot; &lt;&lt; endl;
	else
		cout &lt;&lt; &quot;+ FALSCH &lt;-----------------&quot; &lt;&lt; endl;

	if( (c3 - c4) == Complex(12,4) )
		cout &lt;&lt; &quot;- korrekt&quot; &lt;&lt; endl;
	else
		cout &lt;&lt; &quot;- FALSCH &lt;-----------------&quot; &lt;&lt; endl;
	return 0;
}
</code></pre>
<p>Wenn ich das dann kompiliere warnt mich der Compiler</p>
<blockquote>
<p>make<br />
g++ -o 2DFourier.o -c 2DFourier.cpp<br />
2DFourier.cpp: In member function ‘const Complex&amp; Complex::operator-(const Complex&amp;)’:<br />
2DFourier.cpp:45: warning: reference to local variable ‘result’ returned<br />
g++ -o 2DFourier 2DFourier.o</p>
</blockquote>
<p>Wenn ich das Programm dann ausführe erhalte ich folgende Ausgabe</p>
<blockquote>
<p>./2DFourier<br />
0 == 8 &amp;&amp; 0 == 16<br />
+ FALSCH &lt;-----------------<br />
10 10<br />
-2 6<br />
12 4<br />
0 == 12 &amp;&amp; 0 == 4<br />
- FALSCH &lt;-----------------</p>
</blockquote>
<p>Dass a und b bei der Rückgabe von &quot;+&quot; jeweils null sind, liegt wohl daran, dass ich in der Operatormethode lokal eine Instanz erzeuge, die dann nicht zurückgegeben werden kann, oder ist es was anderes? Wie kann ich das reparieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2039797</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2039797</guid><dc:creator><![CDATA[HändyÄndy]]></dc:creator><pubDate>Fri, 25 Mar 2011 10:21:36 GMT</pubDate></item><item><title><![CDATA[Reply to warning: reference to local variable ‘result’ returned on Fri, 25 Mar 2011 10:27:13 GMT]]></title><description><![CDATA[<p>HändyÄndy schrieb:</p>
<blockquote>
<p>Dass a und b bei der Rückgabe von &quot;+&quot; jeweils null sind, liegt wohl daran, dass ich in der Operatormethode lokal eine Instanz erzeuge, die dann nicht zurückgegeben werden kann, oder ist es was anderes? Wie kann ich das reparieren?</p>
</blockquote>
<p>Du erzeugst eine lokale Instanz, richtig. Die kann durchaus zurückgegeben werden (Wenn du das machst erzeugt der Copiler ggf. eine Kopie, aber das ist hier nicht weiter von Bedeutung).<br />
Was du nicht zurückgeben kannst, ist eine <em>Referenz</em> auf die Variable, weil die Referenz danach ins Nirvana zeigt. Und genau das ist es was du tust. Der Fehler liegt im Rückgabetyp des op-, aber das sagt dir der Compiler ja auch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2039801</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2039801</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 25 Mar 2011 10:27:13 GMT</pubDate></item><item><title><![CDATA[Reply to warning: reference to local variable ‘result’ returned on Fri, 25 Mar 2011 10:27:44 GMT]]></title><description><![CDATA[<p>Es müsste &quot;Complex operator + (const Complex&amp;);&quot; heißen.<br />
Abgesehen davon, könntest du doch auch einfach std::complex verwenden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2039803</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2039803</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Fri, 25 Mar 2011 10:27:44 GMT</pubDate></item><item><title><![CDATA[Reply to warning: reference to local variable ‘result’ returned on Fri, 25 Mar 2011 10:28:02 GMT]]></title><description><![CDATA[<blockquote>
<p>Wie kann ich das reparieren?</p>
</blockquote>
<p>Indem du die Funktion folgendermaßen änderst:<br />
<code>const Complex Complex::operator-(const Complex &amp;rhs )</code><br />
Ich würde auch noch das <code>const</code> im Rückgabetyp weglassen.<br />
Außerdem wird der <code>operator-()</code> üblicherweise nicht als Klassenmethode definiert.</p>
<p>Du weißt schon, dass es std::complex gibt, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2039804</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2039804</guid><dc:creator><![CDATA[Irgendwer]]></dc:creator><pubDate>Fri, 25 Mar 2011 10:28:02 GMT</pubDate></item><item><title><![CDATA[Reply to warning: reference to local variable ‘result’ returned on Fri, 25 Mar 2011 10:29:09 GMT]]></title><description><![CDATA[<p>Danke für die Antwort. Ich habe den Rückgabewert von &quot;Complex&amp;&quot; nach &quot;Complex&quot; geändert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2039807</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2039807</guid><dc:creator><![CDATA[HändyÄndy]]></dc:creator><pubDate>Fri, 25 Mar 2011 10:29:09 GMT</pubDate></item><item><title><![CDATA[Reply to warning: reference to local variable ‘result’ returned on Fri, 25 Mar 2011 10:46:39 GMT]]></title><description><![CDATA[<p>Das Problem bei std::complex ist bloß, dass man dort keine komplexen Zahlen in der polaren Darstellung erzeugen kann, also mit r und phi (&quot;r*exp(i*phi)&quot;). std::complex erlaubt laut man page nur die Erzeugung mittels &quot;double complex z = 1.0 + 1.0 * I; // z = 1 + i&quot; in karthesicher Darstellung. Das reicht in meinem Fall leider nicht aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2039824</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2039824</guid><dc:creator><![CDATA[HändyÄndy]]></dc:creator><pubDate>Fri, 25 Mar 2011 10:46:39 GMT</pubDate></item><item><title><![CDATA[Reply to warning: reference to local variable ‘result’ returned on Fri, 25 Mar 2011 10:49:13 GMT]]></title><description><![CDATA[<p>HändyÄndy schrieb:</p>
<blockquote>
<p>Das Problem bei std::complex ist bloß, dass man dort keine komplexen Zahlen in der polaren Darstellung erzeugen kann, also mit r und phi (&quot;r*exp(i*phi)&quot;). std::complex erlaubt laut man page nur die Erzeugung mittels &quot;double complex z = 1.0 + 1.0 * I; // z = 1 + i&quot; in karthesicher Darstellung. Das reicht in meinem Fall leider nicht aus.</p>
</blockquote>
<p>Dann reicht es, eine einzelne Funktion zu schrieben, die aus polaren Koordineten ein std::complex erzeugt. Das ist ein Einzeiler. Deshlab gleich ne ganze eigene Klasse aus dem Boden zu stampfen ist Overkill.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2039826</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2039826</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 25 Mar 2011 10:49:13 GMT</pubDate></item><item><title><![CDATA[Reply to warning: reference to local variable ‘result’ returned on Fri, 25 Mar 2011 10:51:46 GMT]]></title><description><![CDATA[<p>Stimmt natürlich, ich hatte allerdings meine Implementierung schon fertig, bevor ich wusste, dass es std::complex überhaupt gibt. Nun hab ich schon alles selber gemacht...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2039832</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2039832</guid><dc:creator><![CDATA[HändyÄndy]]></dc:creator><pubDate>Fri, 25 Mar 2011 10:51:46 GMT</pubDate></item><item><title><![CDATA[Reply to warning: reference to local variable ‘result’ returned on Fri, 25 Mar 2011 11:50:36 GMT]]></title><description><![CDATA[<p>HändyÄndy schrieb:</p>
<blockquote>
<p>Das Problem bei std::complex ist bloß, dass man dort keine komplexen Zahlen in der polaren Darstellung erzeugen kann, also mit r und phi (&quot;r*exp(i*phi)&quot;). std::complex erlaubt laut man page nur die Erzeugung mittels &quot;double complex z = 1.0 + 1.0 * I; // z = 1 + i&quot; in karthesicher Darstellung. Das reicht in meinem Fall leider nicht aus.</p>
</blockquote>
<p><a href="http://www.cplusplus.com/reference/std/complex/polar/" rel="nofollow">http://www.cplusplus.com/reference/std/complex/polar/</a><br />
Übrigens sind das wohl die Manpages für die C99-Complexerweiterung und nicht für <code>std::complex</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2039871</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2039871</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Fri, 25 Mar 2011 11:50:36 GMT</pubDate></item></channel></rss>