<?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[Frage zu C++-Konstrukt: Syntaktisch korrekt?]]></title><description><![CDATA[<p>Hi Leute,</p>
<p>folgendes kleine Programm kann ich mit keiner Version des Visual Studios kompilieren... Meiner Meinung nach müsste das aber korrekt sein.</p>
<pre><code class="language-cpp">// CompilerTest.cpp : Defines the entry point for the console application.
//

#include &lt;iostream&gt;

class A
{
public:
	A(int i){m_i=i;}
	int m_i;
};

class B
{
public:
	B(A a){m_j=a.m_i;}
	int m_j;
};

void Test(B &amp;b)
{
	std::cout &lt;&lt; b.m_j;
}

int main(int argc, char* argv[])
{
	int n=5;
	B b(A(n)); // &lt;--
	Test(b);
	return 0;
}
</code></pre>
<p>In der markierten Zeile bekomme ich folgenden Fehler:</p>
<ul>
<li>VC++ 6.0: error C2664: 'Test' : cannot convert parameter 1 from 'class B (class A)' to 'class B &amp;'<br />
Context does not allow for disambiguation of overloaded function</li>
<li><a href="http://VS.NET" rel="nofollow">VS.NET</a> 2003: &quot;error C2664: 'Test' : cannot convert parameter 1 from 'B (A)' to 'B &amp;'<br />
A reference that is not to 'const' cannot be bound to a non-lvalue&quot;</li>
<li>VS 2005: error C2664: 'Test' : cannot convert parameter 1 from 'B (__cdecl *)(A)' to 'B &amp;'</li>
</ul>
<p>Wenn man die main etwas abändert tut es übrigens:</p>
<pre><code class="language-cpp">int main(int argc, char* argv[])
{
	B b(A(5));
	Test(b);
	return 0;
}
</code></pre>
<p>oder:</p>
<pre><code class="language-cpp">int main(int argc, char* argv[])
{
	int n=5;
	Test(B(A(n)));
	return 0;
}
</code></pre>
<p>oder:</p>
<pre><code class="language-cpp">int main(int argc, char* argv[])
{
	int n=5;
	A a(n);
	B b(a);
	Test(b);
	return 0;
}
</code></pre>
<p>Ist das ein Compiler-Bug oder übersehe ich irgendetwas?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/144810/frage-zu-c-konstrukt-syntaktisch-korrekt</link><generator>RSS for Node</generator><lastBuildDate>Wed, 02 Sep 2026 18:51:16 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/144810.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 21 Apr 2006 21:16:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zu C++-Konstrukt: Syntaktisch korrekt? on Fri, 21 Apr 2006 21:16:48 GMT]]></title><description><![CDATA[<p>Hi Leute,</p>
<p>folgendes kleine Programm kann ich mit keiner Version des Visual Studios kompilieren... Meiner Meinung nach müsste das aber korrekt sein.</p>
<pre><code class="language-cpp">// CompilerTest.cpp : Defines the entry point for the console application.
//

#include &lt;iostream&gt;

class A
{
public:
	A(int i){m_i=i;}
	int m_i;
};

class B
{
public:
	B(A a){m_j=a.m_i;}
	int m_j;
};

void Test(B &amp;b)
{
	std::cout &lt;&lt; b.m_j;
}

int main(int argc, char* argv[])
{
	int n=5;
	B b(A(n)); // &lt;--
	Test(b);
	return 0;
}
</code></pre>
<p>In der markierten Zeile bekomme ich folgenden Fehler:</p>
<ul>
<li>VC++ 6.0: error C2664: 'Test' : cannot convert parameter 1 from 'class B (class A)' to 'class B &amp;'<br />
Context does not allow for disambiguation of overloaded function</li>
<li><a href="http://VS.NET" rel="nofollow">VS.NET</a> 2003: &quot;error C2664: 'Test' : cannot convert parameter 1 from 'B (A)' to 'B &amp;'<br />
A reference that is not to 'const' cannot be bound to a non-lvalue&quot;</li>
<li>VS 2005: error C2664: 'Test' : cannot convert parameter 1 from 'B (__cdecl *)(A)' to 'B &amp;'</li>
</ul>
<p>Wenn man die main etwas abändert tut es übrigens:</p>
<pre><code class="language-cpp">int main(int argc, char* argv[])
{
	B b(A(5));
	Test(b);
	return 0;
}
</code></pre>
<p>oder:</p>
<pre><code class="language-cpp">int main(int argc, char* argv[])
{
	int n=5;
	Test(B(A(n)));
	return 0;
}
</code></pre>
<p>oder:</p>
<pre><code class="language-cpp">int main(int argc, char* argv[])
{
	int n=5;
	A a(n);
	B b(a);
	Test(b);
	return 0;
}
</code></pre>
<p>Ist das ein Compiler-Bug oder übersehe ich irgendetwas?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1042275</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1042275</guid><dc:creator><![CDATA[dEUs]]></dc:creator><pubDate>Fri, 21 Apr 2006 21:16:48 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu C++-Konstrukt: Syntaktisch korrekt? on Fri, 21 Apr 2006 21:30:36 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">B b((A(n))); // &lt;--
</code></pre>
<p>So gehts auf jeden Fall. Es gibt da irgend so eine Regel ( die ich noch nie verstanden habe ) die sagt wenns aussieht wie eine deklaration dann ist's eine deklaration ( oder so ähnlich ).<br />
Kurt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1042280</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1042280</guid><dc:creator><![CDATA[ZuK]]></dc:creator><pubDate>Fri, 21 Apr 2006 21:30:36 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu C++-Konstrukt: Syntaktisch korrekt? on Fri, 21 Apr 2006 21:32:53 GMT]]></title><description><![CDATA[<p>Also nur zur Info im GCC 4.0.2 kommt folgendes dazu:</p>
<blockquote>
<p>Fehler: ungültige Initialisierung einer nicht-konstanten Referenz des Typs »B&amp;« von temporärem Wert des Typs »B (*)(A)«</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1042281</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1042281</guid><dc:creator><![CDATA[icepacker]]></dc:creator><pubDate>Fri, 21 Apr 2006 21:32:53 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu C++-Konstrukt: Syntaktisch korrekt? on Fri, 21 Apr 2006 21:48:52 GMT]]></title><description><![CDATA[<p>Danke euch beiden. Scheint also kein Bug zu sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1042286</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1042286</guid><dc:creator><![CDATA[dEUs]]></dc:creator><pubDate>Fri, 21 Apr 2006 21:48:52 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu C++-Konstrukt: Syntaktisch korrekt? on Fri, 21 Apr 2006 21:50:19 GMT]]></title><description><![CDATA[<p>icepacker schrieb:</p>
<blockquote>
<p>Also nur zur Info im GCC 4.0.2 kommt folgendes dazu:</p>
<blockquote>
<p>Fehler: ungültige Initialisierung einer nicht-konstanten Referenz des Typs »B&amp;« von temporärem Wert des Typs »B (*)(A)«</p>
</blockquote>
</blockquote>
<p>eben es schaut so aus als ob du eine funktion</p>
<pre><code>B b(A);
</code></pre>
<p>declarieren würdest.<br />
Kurt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1042288</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1042288</guid><dc:creator><![CDATA[ZuK]]></dc:creator><pubDate>Fri, 21 Apr 2006 21:50:19 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu C++-Konstrukt: Syntaktisch korrekt? on Fri, 21 Apr 2006 22:07:22 GMT]]></title><description><![CDATA[<p>Ich wusste garnicht, dass man in C++ Funktionen innerhalb von Funktionen deklarieren kann...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1042290</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1042290</guid><dc:creator><![CDATA[dEUs]]></dc:creator><pubDate>Fri, 21 Apr 2006 22:07:22 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu C++-Konstrukt: Syntaktisch korrekt? on Fri, 21 Apr 2006 22:10:37 GMT]]></title><description><![CDATA[<p>Doch deklarieren kannst du überall.<br />
Kurt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1042293</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1042293</guid><dc:creator><![CDATA[ZuK]]></dc:creator><pubDate>Fri, 21 Apr 2006 22:10:37 GMT</pubDate></item></channel></rss>