<?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[vererbung]]></title><description><![CDATA[<p>folgende situation:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

class foo_base
{
	public:
		void f(int a, int b)
		{
			cout&lt;&lt;&quot;foo_base::f(int, int)&quot;&lt;&lt;endl;
		};
};

class foo_derive :
	virtual public foo_base
{
	public:
		foo_derive f(foo_derive const &amp;src, int b)
		{
			cout&lt;&lt;&quot;foo_derive::f(foo_derive const &amp;, int)&quot;&lt;&lt;endl;
			return src;
		};
};

int main(int argc, char** argv)
{
	foo_derive g;
	g.f(2,2);
	return 0;
};
</code></pre>
<p>folgender Fehler:</p>
<pre><code>error C2664: 'foo_derive::f' : cannot convert parameter 1 from 'int' to 'const foo_derive &amp;'
        Reason: cannot convert from 'int' to 'const foo_derive'
        No constructor could take the source type, or constructor overload resolution was ambiguous
</code></pre>
<p>ich versteh nicht wo der Fehler liegt, da ist doch nichts mehrdeutig oder überseh ich da was? also man kann das durch</p>
<pre><code class="language-cpp">class foo_derive :
	virtual public foo_base
{
		using foo_base::f;
//[...]
};
</code></pre>
<p>umgehen, aber ich hätte trotzdem gern gewusst warum genau das nicht funktioniert, denn die Methoden sind meiner Ansicht nach eindeutig zuzuordnen.<br />
vllt kann mir ja jemand helfen, vielen dank schonmal im voraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/185666/vererbung</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 06:16:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/185666.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 29 Jun 2007 14:48:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to vererbung on Fri, 29 Jun 2007 14:48:37 GMT]]></title><description><![CDATA[<p>folgende situation:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

class foo_base
{
	public:
		void f(int a, int b)
		{
			cout&lt;&lt;&quot;foo_base::f(int, int)&quot;&lt;&lt;endl;
		};
};

class foo_derive :
	virtual public foo_base
{
	public:
		foo_derive f(foo_derive const &amp;src, int b)
		{
			cout&lt;&lt;&quot;foo_derive::f(foo_derive const &amp;, int)&quot;&lt;&lt;endl;
			return src;
		};
};

int main(int argc, char** argv)
{
	foo_derive g;
	g.f(2,2);
	return 0;
};
</code></pre>
<p>folgender Fehler:</p>
<pre><code>error C2664: 'foo_derive::f' : cannot convert parameter 1 from 'int' to 'const foo_derive &amp;'
        Reason: cannot convert from 'int' to 'const foo_derive'
        No constructor could take the source type, or constructor overload resolution was ambiguous
</code></pre>
<p>ich versteh nicht wo der Fehler liegt, da ist doch nichts mehrdeutig oder überseh ich da was? also man kann das durch</p>
<pre><code class="language-cpp">class foo_derive :
	virtual public foo_base
{
		using foo_base::f;
//[...]
};
</code></pre>
<p>umgehen, aber ich hätte trotzdem gern gewusst warum genau das nicht funktioniert, denn die Methoden sind meiner Ansicht nach eindeutig zuzuordnen.<br />
vllt kann mir ja jemand helfen, vielen dank schonmal im voraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1315059</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1315059</guid><dc:creator><![CDATA[StarCraftFeuerteufel]]></dc:creator><pubDate>Fri, 29 Jun 2007 14:48:37 GMT</pubDate></item><item><title><![CDATA[Reply to vererbung on Fri, 29 Jun 2007 15:23:26 GMT]]></title><description><![CDATA[<p>Die Definition von f der abgeleiteten Klasse überdeckt die Definition der Basisklasse. Unabhängig von den Parametern. Mit using blendest du sie wieder ein.</p>
<p>Btw, warum leitest du eigentlich virtual public ab? Auch wenn's für das Beispiel völlig egal ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1315086</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1315086</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Fri, 29 Jun 2007 15:23:26 GMT</pubDate></item><item><title><![CDATA[Reply to vererbung on Fri, 29 Jun 2007 15:55:17 GMT]]></title><description><![CDATA[<p>virtual public ist so drin, weil ich das in meinen anderen strukturen auch so hab, das ist ja nicht weiter relevant.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1315132</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1315132</guid><dc:creator><![CDATA[StarCraftFeuerteufel]]></dc:creator><pubDate>Fri, 29 Jun 2007 15:55:17 GMT</pubDate></item><item><title><![CDATA[Reply to vererbung on Fri, 29 Jun 2007 18:42:45 GMT]]></title><description><![CDATA[<p>FreakyBKA schrieb:</p>
<blockquote>
<p>virtual public ist so drin, weil ich das in meinen anderen strukturen auch so hab, das ist ja nicht weiter relevant.</p>
</blockquote>
<p>Naja virtuelle Vererbung kennzeichnet Klassen, die für &quot;Diamandvererbung&quot; infrage kommen UND damit Probleme hätten. Da sie etwas anders initialisiert werden als nicht-virtuelle (Konstruktor wird immer direkt von der am entferntesten abgeleitetn Klasse aufgerufen - und die muss das auch dürfen und können), würde ich das nicht zum Default machen.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1315240</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1315240</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Fri, 29 Jun 2007 18:42:45 GMT</pubDate></item></channel></rss>