<?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[Ambigious call to overloaded function]]></title><description><![CDATA[<p>Hi</p>
<p>Ich habe gerade versucht mit Templates zu arbeiten, wobei ich folgenden Code erstellt habe:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

template &lt;typename T&gt;
void swap(T &amp;a, T &amp;b);

using namespace std;

int main(){

	int i = 10;
	int j = 20;
	cout &lt;&lt; &quot;i, j = &quot; &lt;&lt; i &lt;&lt; &quot;, &quot; &lt;&lt; j &lt;&lt; &quot;.\n&quot;;
	cout &lt;&lt; &quot;Using cimpiler-generated int swapper:\n&quot;;
	swap(i, j);
	cout &lt;&lt; &quot;Now i, j = &quot; &lt;&lt; i &lt;&lt; &quot;, &quot; &lt;&lt; j &lt;&lt; &quot;.\n&quot;;

	double x = 24.5;
	double y = 81.7;
	cout &lt;&lt; &quot;x, y = &quot; &lt;&lt; x &lt;&lt; &quot;, &quot; &lt;&lt; y &lt;&lt; &quot;.\n&quot;;
	cout &lt;&lt; &quot;Using compiler-generated double swapper:\n&quot;;
	swap(x, y);
	cout &lt;&lt; &quot;Now x, y = &quot; &lt;&lt; x &lt;&lt; &quot;, &quot; &lt;&lt; y &lt;&lt; &quot;.\n&quot;;

	int exit;
	cin &gt;&gt; exit; 
	return 0;
}

template &lt;typename T&gt;
void swap(T &amp;a, T &amp;b)
{
	T temp;
	temp = a;
	a = b;
	b = temp;
}
</code></pre>
<p>Soweit ich das ganze verstanden habe, müsste der Code fehlerfrei ausführbar sein. Allerdings liefert mir der Compiler folgende Fehlermeldungen:</p>
<blockquote>
<p>(15) : error C2668: 'swap' : ambiguous call to overloaded function<br />
(23) : error C2668: 'swap' : ambiguous call to overloaded function</p>
</blockquote>
<p>Kann mir jemand erklären, was ich da falsch mache?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/256369/ambigious-call-to-overloaded-function</link><generator>RSS for Node</generator><lastBuildDate>Fri, 11 Sep 2026 06:59:58 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/256369.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 11 Dec 2009 17:32:16 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Ambigious call to overloaded function on Fri, 11 Dec 2009 17:32:16 GMT]]></title><description><![CDATA[<p>Hi</p>
<p>Ich habe gerade versucht mit Templates zu arbeiten, wobei ich folgenden Code erstellt habe:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

template &lt;typename T&gt;
void swap(T &amp;a, T &amp;b);

using namespace std;

int main(){

	int i = 10;
	int j = 20;
	cout &lt;&lt; &quot;i, j = &quot; &lt;&lt; i &lt;&lt; &quot;, &quot; &lt;&lt; j &lt;&lt; &quot;.\n&quot;;
	cout &lt;&lt; &quot;Using cimpiler-generated int swapper:\n&quot;;
	swap(i, j);
	cout &lt;&lt; &quot;Now i, j = &quot; &lt;&lt; i &lt;&lt; &quot;, &quot; &lt;&lt; j &lt;&lt; &quot;.\n&quot;;

	double x = 24.5;
	double y = 81.7;
	cout &lt;&lt; &quot;x, y = &quot; &lt;&lt; x &lt;&lt; &quot;, &quot; &lt;&lt; y &lt;&lt; &quot;.\n&quot;;
	cout &lt;&lt; &quot;Using compiler-generated double swapper:\n&quot;;
	swap(x, y);
	cout &lt;&lt; &quot;Now x, y = &quot; &lt;&lt; x &lt;&lt; &quot;, &quot; &lt;&lt; y &lt;&lt; &quot;.\n&quot;;

	int exit;
	cin &gt;&gt; exit; 
	return 0;
}

template &lt;typename T&gt;
void swap(T &amp;a, T &amp;b)
{
	T temp;
	temp = a;
	a = b;
	b = temp;
}
</code></pre>
<p>Soweit ich das ganze verstanden habe, müsste der Code fehlerfrei ausführbar sein. Allerdings liefert mir der Compiler folgende Fehlermeldungen:</p>
<blockquote>
<p>(15) : error C2668: 'swap' : ambiguous call to overloaded function<br />
(23) : error C2668: 'swap' : ambiguous call to overloaded function</p>
</blockquote>
<p>Kann mir jemand erklären, was ich da falsch mache?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1821313</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821313</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Fri, 11 Dec 2009 17:32:16 GMT</pubDate></item><item><title><![CDATA[Reply to Ambigious call to overloaded function on Fri, 11 Dec 2009 17:34:46 GMT]]></title><description><![CDATA[<p>Zu deutsch: Mehrdeutiger Aufruf zum Überladen der Funktion.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1821316</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821316</guid><dc:creator><![CDATA[5cript]]></dc:creator><pubDate>Fri, 11 Dec 2009 17:34:46 GMT</pubDate></item><item><title><![CDATA[Reply to Ambigious call to overloaded function on Fri, 11 Dec 2009 17:38:09 GMT]]></title><description><![CDATA[<p>Das Englisch ist nicht das Problem... mein Buch, mit dem ich das ganze lerne ist auf Englisch und ich verstehe alles perfekt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";-)"
      alt="😉"
    /></p>
<p>Mir ist nur unklar, wiso der Aufruf mehrdeutig ist. So wie ich das verstanden habe, kann man problemlos double oder bool oder int Variablen übergeben. Da die Templates ja generisch sind (so wie ich das verstanden habe ist es in etwas das Gleiche wie Java Generics vom Prinzip her) müsste das ja gehen.</p>
<p>Könntest du mir sagen, was ich explizit in meinem Code ändern muss und wiso?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1821318</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821318</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Fri, 11 Dec 2009 17:38:09 GMT</pubDate></item><item><title><![CDATA[Reply to Ambigious call to overloaded function on Fri, 11 Dec 2009 17:48:25 GMT]]></title><description><![CDATA[<p>1. Ich weiß, aber das Problem ist dass ich dir da nicht umbedingt helfen kann <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
- Ich glaub ich lass das Kommentar das nächst mal.</p>
<p>btw:</p>
<pre><code class="language-cpp">int exit;
    cin &gt;&gt; exit;
    return 0;
</code></pre>
<p>das ist nicht schön !</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1821322</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821322</guid><dc:creator><![CDATA[5cript]]></dc:creator><pubDate>Fri, 11 Dec 2009 17:48:25 GMT</pubDate></item><item><title><![CDATA[Reply to Ambigious call to overloaded function on Fri, 11 Dec 2009 17:51:18 GMT]]></title><description><![CDATA[<p>Lol, alles klar ^^</p>
<p>Der Schlussteil ist nur dazu da, dass das Fenster nicht geschlossen wird, nachdem der Code ausgeführt wurde. Je nach IDE und Compiler muss man das anfügen, sonst sieht man die Ergebnisse gar nie.</p>
<p>Kann mir jemand sagen, wie ich mein Problem lösen kann?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1821323</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821323</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Fri, 11 Dec 2009 17:51:18 GMT</pubDate></item><item><title><![CDATA[Reply to Ambigious call to overloaded function on Fri, 11 Dec 2009 18:00:54 GMT]]></title><description><![CDATA[<p>Lass das using namespace std; weg. Das Problem ist, dass es im Namensraum std bereits eine Funktion swap gibt. Der Compiler kann jetzt aber nicht entscheiden ob dein Template verwendet werden soll oder das aus std.</p>
<p>Schreib stattdessen entweder explizit std::cout und std::cin oder verwende using std::cout; und using std::cin;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1821331</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821331</guid><dc:creator><![CDATA[OhneName]]></dc:creator><pubDate>Fri, 11 Dec 2009 18:00:54 GMT</pubDate></item><item><title><![CDATA[Reply to Ambigious call to overloaded function on Fri, 11 Dec 2009 18:03:12 GMT]]></title><description><![CDATA[<p>Achso, jetzt ist mir klar, warum die Function im Buch Swap und nicht swap heisst. Ich habe die Methode jetzt kurzerhand umbenannt.</p>
<p>Vielen Danke für deine Hilfe <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/1821332</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821332</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Fri, 11 Dec 2009 18:03:12 GMT</pubDate></item><item><title><![CDATA[Reply to Ambigious call to overloaded function on Fri, 11 Dec 2009 19:13:43 GMT]]></title><description><![CDATA[<p>icarus2 schrieb:</p>
<blockquote>
<p>Lol, alles klar ^^</p>
<p>Der Schlussteil ist nur dazu da, dass das Fenster nicht geschlossen wird, nachdem der Code ausgeführt wurde. Je nach IDE und Compiler muss man das anfügen, sonst sieht man die Ergebnisse gar nie.</p>
<p>Kann mir jemand sagen, wie ich mein Problem lösen kann?</p>
</blockquote>
<p>da gibts ne bessere Methode im faq</p>
<p>mit cin.get()<br />
cin.clear()<br />
etc.</p>
<p>Das man das dann nicht sieht ist mir schon klar <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="🙂"
    /> hab nicht umsonst auch mal Console gemacht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1821342</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821342</guid><dc:creator><![CDATA[5cript]]></dc:creator><pubDate>Fri, 11 Dec 2009 19:13:43 GMT</pubDate></item><item><title><![CDATA[Reply to Ambigious call to overloaded function on Fri, 11 Dec 2009 19:14:34 GMT]]></title><description><![CDATA[<p>im Übrigen gibt der Compiler normalerweise mehr als nur die Fehlermeldung an, in dem Fall normalerweise die beiden Kandidaten zwischen denen er sich nicht entscheiden kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1821343</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821343</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 11 Dec 2009 19:14:34 GMT</pubDate></item><item><title><![CDATA[Reply to Ambigious call to overloaded function on Sat, 12 Dec 2009 10:37:51 GMT]]></title><description><![CDATA[<p>Ja, es gab mehr Fehlermeldungen... viele Zeilen sogar ^^</p>
<p>Aber ich dachte, dass die beiden Zeilen wohl die wichtigsten sind. Da habe ich mal nur die gepostet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1821493</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821493</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Sat, 12 Dec 2009 10:37:51 GMT</pubDate></item><item><title><![CDATA[Reply to Ambigious call to overloaded function on Sun, 13 Dec 2009 12:51:59 GMT]]></title><description><![CDATA[<p>Gibt es in C++ nicht schon per default diese swap Funktion? Versuch mal den Namen ein wenig umzuaendern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1821930</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821930</guid><dc:creator><![CDATA[moe szyslak]]></dc:creator><pubDate>Sun, 13 Dec 2009 12:51:59 GMT</pubDate></item><item><title><![CDATA[Reply to Ambigious call to overloaded function on Sun, 13 Dec 2009 14:56:16 GMT]]></title><description><![CDATA[<p>Jap, die Funktion wird klein geschrieben, swap(..)<br />
Genau das war das Problem, dass ich zuerst die Funktion swap() geschrieben habe, als Swap() wie es in der Übung geschrieben wurde. Deswegen gabs dann auch Probleme.</p>
<p>Das war nur ein Beispiel im Buch, um das Prinzip der Templates zu zeigen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1821980</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821980</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Sun, 13 Dec 2009 14:56:16 GMT</pubDate></item><item><title><![CDATA[Reply to Ambigious call to overloaded function on Sun, 13 Dec 2009 15:04:36 GMT]]></title><description><![CDATA[<p>Alternativ könntest du auch sparsamer mit <code>using namespace</code> umgehen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1821983</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821983</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 13 Dec 2009 15:04:36 GMT</pubDate></item><item><title><![CDATA[Reply to Ambigious call to overloaded function on Sun, 13 Dec 2009 19:07:03 GMT]]></title><description><![CDATA[<p>Jup, das wäre auch ne Lösung, danke für den Hinweis.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1822095</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1822095</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Sun, 13 Dec 2009 19:07:03 GMT</pubDate></item></channel></rss>