<?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[Funktionsauflösung?]]></title><description><![CDATA[<p>Hallo,</p>
<p>wieso erkennt der Compiler hier nicht, welche Funktion ich aufrufen möchte. Eigentlich ist es ja aufgrund des Argumentes eindeutig, was ich möchte...</p>
<pre><code class="language-cpp">class B
{
};

template&lt;class&gt; class C
{
};

class ABase1
{
public:
	template&lt;class A&gt; static void Free(C&lt;A&gt;);
};

class ABase2
{
public:
	static void Free(B);
};

class A:
	public ABase1,public ABase2
{
};

int main()
{
	B b;
	A::Free(b);
}
</code></pre>
<blockquote>
<p>1&gt;d:\projekte\test2\main.cpp(29) : error C2385: ambiguous access of 'Free'<br />
1&gt; could be the 'Free' in base 'ABase1'<br />
1&gt; or could be the 'Free' in base 'ABase2'<br />
1&gt;d:\projekte\test2\main.cpp(29) : error C2784: 'void ABase1::Free(C&lt;&lt;unnamed-symbol&gt;&gt;)' : could not deduce template argument for 'C&lt;&lt;unnamed-symbol&gt;&gt;' from 'B'<br />
1&gt; d:\projekte\test2\main.cpp(12) : see declaration of 'ABase1::Free'</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/topic/200928/funktionsauflösung</link><generator>RSS for Node</generator><lastBuildDate>Mon, 05 Oct 2026 06:05:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/200928.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 21 Dec 2007 14:31:16 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Funktionsauflösung? on Fri, 21 Dec 2007 14:31:16 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>wieso erkennt der Compiler hier nicht, welche Funktion ich aufrufen möchte. Eigentlich ist es ja aufgrund des Argumentes eindeutig, was ich möchte...</p>
<pre><code class="language-cpp">class B
{
};

template&lt;class&gt; class C
{
};

class ABase1
{
public:
	template&lt;class A&gt; static void Free(C&lt;A&gt;);
};

class ABase2
{
public:
	static void Free(B);
};

class A:
	public ABase1,public ABase2
{
};

int main()
{
	B b;
	A::Free(b);
}
</code></pre>
<blockquote>
<p>1&gt;d:\projekte\test2\main.cpp(29) : error C2385: ambiguous access of 'Free'<br />
1&gt; could be the 'Free' in base 'ABase1'<br />
1&gt; or could be the 'Free' in base 'ABase2'<br />
1&gt;d:\projekte\test2\main.cpp(29) : error C2784: 'void ABase1::Free(C&lt;&lt;unnamed-symbol&gt;&gt;)' : could not deduce template argument for 'C&lt;&lt;unnamed-symbol&gt;&gt;' from 'B'<br />
1&gt; d:\projekte\test2\main.cpp(12) : see declaration of 'ABase1::Free'</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1424472</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1424472</guid><dc:creator><![CDATA[ubata]]></dc:creator><pubDate>Fri, 21 Dec 2007 14:31:16 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionsauflösung? on Fri, 21 Dec 2007 14:45:10 GMT]]></title><description><![CDATA[<p>überblicksmäßig gesagt: der compiler sucht zunächst, ob es in einer basisklasse einen passenden _namen_ gibt (name resolution), und wenn es einen gibt, und erst dann, kommt es zur überlagunsauflösung (overload resolution). dein compiler findet nun in zwei verschiedenen klassen denselben namen: Free.</p>
<p>jetzt gibt es aber eine mehrdeutigkeit in der namensauflösung, und bevor die overload resolution beginnt, meldet der compiler einen fehler.</p>
<p>lösung: führe die namen in das passende scope selbst ein.</p>
<pre><code class="language-cpp">class A : public ABase1, ABase2
{
public:
   using ABase1::Free;
   using ABase2::Free;
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1424485</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1424485</guid><dc:creator><![CDATA[queer_boy]]></dc:creator><pubDate>Fri, 21 Dec 2007 14:45:10 GMT</pubDate></item></channel></rss>