<?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[Funktionstemplate rekursiv aufgerufen?]]></title><description><![CDATA[<p>Hi Leute <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>
<p>Bereite mich momentan auf meine kommende Klausur in Informatik vor und wollte 2 einfache Sachen implementieren (Arithmetisches + Harmonisches Mittel). Weil ich aber gleichzeitig rekursion + Templates üben wollte, dachte ich ich könnte es kombinieren.</p>
<p>Jetzt mein Problem: Ist es möglich, dass ich in Templates garnicht rekursiv arbeiten kann, oder vielmehr immer wieder ein neues Objekt erstellt wird?</p>
<p>So in der Art:</p>
<pre><code>int durchlauf=0;
template &lt;class T&gt;
T arith(int size){
cout &lt;&lt; size &lt;&lt; endl;
cout &lt;&lt; ++durchlauf &lt;&lt; endl;
if (size==10) return 0;
return arith&lt;double&gt;(size++);
}
</code></pre>
<p>Aufgerufen in der main wirds einfach mit arith&lt;double&gt;(1);</p>
<p>Mir ist klar, dass die Funktion jetzt so nix macht, aber habe halt gemerkt, dass die Rekursionsverankerung nicht greift.</p>
<p>Denkfehler meinerseits oder was anderes? <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>
<p>Danke für die Hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/261718/funktionstemplate-rekursiv-aufgerufen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 07 Sep 2026 03:47:05 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/261718.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 22 Feb 2010 21:07:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Funktionstemplate rekursiv aufgerufen? on Mon, 22 Feb 2010 21:07:17 GMT]]></title><description><![CDATA[<p>Hi Leute <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>
<p>Bereite mich momentan auf meine kommende Klausur in Informatik vor und wollte 2 einfache Sachen implementieren (Arithmetisches + Harmonisches Mittel). Weil ich aber gleichzeitig rekursion + Templates üben wollte, dachte ich ich könnte es kombinieren.</p>
<p>Jetzt mein Problem: Ist es möglich, dass ich in Templates garnicht rekursiv arbeiten kann, oder vielmehr immer wieder ein neues Objekt erstellt wird?</p>
<p>So in der Art:</p>
<pre><code>int durchlauf=0;
template &lt;class T&gt;
T arith(int size){
cout &lt;&lt; size &lt;&lt; endl;
cout &lt;&lt; ++durchlauf &lt;&lt; endl;
if (size==10) return 0;
return arith&lt;double&gt;(size++);
}
</code></pre>
<p>Aufgerufen in der main wirds einfach mit arith&lt;double&gt;(1);</p>
<p>Mir ist klar, dass die Funktion jetzt so nix macht, aber habe halt gemerkt, dass die Rekursionsverankerung nicht greift.</p>
<p>Denkfehler meinerseits oder was anderes? <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>
<p>Danke für die Hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1859791</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1859791</guid><dc:creator><![CDATA[jakap]]></dc:creator><pubDate>Mon, 22 Feb 2010 21:07:17 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionstemplate rekursiv aufgerufen? on Mon, 22 Feb 2010 21:13:49 GMT]]></title><description><![CDATA[<p>Nö, das geht wunderbar.</p>
<p>Eventuell solltest du bei deinem Funktionsaufruf ++size statt size++ benutzen? Sonst wird das nämlich tatsächlich nichts (mal abgesehen von einer Endlosen Rekursion die irgenwann in einem Stack Overflow resultiert ;)).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1859795</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1859795</guid><dc:creator><![CDATA[blub* 0]]></dc:creator><pubDate>Mon, 22 Feb 2010 21:13:49 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionstemplate rekursiv aufgerufen? on Mon, 22 Feb 2010 21:46:21 GMT]]></title><description><![CDATA[<p>Omg.</p>
<p>Ja äh kurz und knackig <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="😉"
    /> Danke. Läuft jetzt <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>Was kann man schöner machen bei dem Code (abgesehen davon, dass da Rekursion nicht wirklich schön ist, oder? : /)</p>
<pre><code>T arith(T *input, int size){
	T static sum=0;
	if(*input=='\0') return sum/size;
	sum+=*input;
        return arith&lt;double&gt;(++input, size);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1859822</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1859822</guid><dc:creator><![CDATA[jakap]]></dc:creator><pubDate>Mon, 22 Feb 2010 21:46:21 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionstemplate rekursiv aufgerufen? on Mon, 22 Feb 2010 21:56:54 GMT]]></title><description><![CDATA[<p>jakap schrieb:</p>
<blockquote>
<p>Was kann man schöner machen bei dem Code (abgesehen davon, dass da Rekursion nicht wirklich schön ist, oder? : /)</p>
</blockquote>
<p>Eigentlich sin d sowohl Templates als auch Rekursion für die Berechnung des Mittelwertes ziemlich unschön, da sie keinerlei Mehrwert bringen. Der einzig sinnvolle Templateparameter ist <code>double</code> und die verwendete Rekursion ist bloß eine umständliche Form der Schleife.</p>
<p>Da es aber rein um das Üben von Templates und Rekursion geht: Gut umgesetzt, besser wird's kaum gehen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1859825</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1859825</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 22 Feb 2010 21:56:54 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionstemplate rekursiv aufgerufen? on Mon, 22 Feb 2010 22:01:06 GMT]]></title><description><![CDATA[<p>Okay besten Dank</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1859829</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1859829</guid><dc:creator><![CDATA[jakap]]></dc:creator><pubDate>Mon, 22 Feb 2010 22:01:06 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionstemplate rekursiv aufgerufen? on Mon, 22 Feb 2010 22:29:11 GMT]]></title><description><![CDATA[<p>Hab leider nochmal ne Frage:</p>
<pre><code>template &lt;class T&gt;
void swap(T &amp;a, T &amp;b){
	T temp;
	temp=a;
	a=b;
	b=a;
}

template &lt;class T&gt;
void dreh_um(T *array, int anzahl){
	for(int i=0;i&lt;anzahl;i++){
		swap&lt;T&gt;((T)array[i], (T)array[anzahl-i]);
		anzahl--;
	}
}
</code></pre>
<p>error: no matching function for call to ‘swap(int, int)’</p>
<p>Ich hab in dreh_um extra schon gecastet (online gefunden..), weil er sonst nicht wusste, welche Methode er nehmen soll. Aber so läufts eben auch nicht, wieso findet er denn swap(int) nicht?</p>
<p>Danke im Voraus <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>
<p>edit: Das array umdrehen ansich klappt hier natürlich noch nicht, hab vergessen 1 abzuziehen und durch 2 zu teilen <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/1859834</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1859834</guid><dc:creator><![CDATA[jakap]]></dc:creator><pubDate>Mon, 22 Feb 2010 22:29:11 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionstemplate rekursiv aufgerufen? on Mon, 22 Feb 2010 22:27:58 GMT]]></title><description><![CDATA[<p>Lass den (völlig unnötigen) Cast weg, dann wird es funktionieren. Das liegt daran, dass swap() int-Referenzen erwartet, das Ergebnis des Casts kann aber nicht in eine Referenz umgewandelt werden.</p>
<p>Dein swap() ist übrigens falsch, da solltest du noch mal einen Blick drauf werfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1859840</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1859840</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 22 Feb 2010 22:27:58 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionstemplate rekursiv aufgerufen? on Mon, 22 Feb 2010 22:35:17 GMT]]></title><description><![CDATA[<p>Ja, zu schnell geschrieben, muss natürlich b=temp sein <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="😃"
    /></p>
<p>Leider leider funktionert es nicht ohne cast, deswegen habbich den ja erst gegoogelt <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>
<pre><code class="language-cpp">template &lt;class T&gt;
void swap(T &amp;a, T &amp;b){
	T temp;
	temp=a;
	a=b;
	b=temp;
}

template &lt;class T&gt;
void dreh_um(T *array, int anzahl){
	for(int i=0;i&lt;anzahl/2;i++){
		swap&lt;T&gt;(array[i], array[anzahl-1-i]);
	}
}
</code></pre>
<pre><code>../reihenfolge.cpp: In function ‘void dreh_um(T*, int) [with T = int]’:
../reihenfolge.cpp:33:   instantiated from here
../reihenfolge.cpp:22: error: call of overloaded ‘swap(int&amp;, int&amp;)’ is ambiguous
../reihenfolge.cpp:12: note: candidates are: void swap(T&amp;, T&amp;) [with T = int]
/usr/include/c++/4.4/bits/move.h:76: note:                 void std::swap(_Tp&amp;, _Tp&amp;) [with _Tp = int]
</code></pre>
<p>Danke für die Hilfe! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1859843</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1859843</guid><dc:creator><![CDATA[jakap]]></dc:creator><pubDate>Mon, 22 Feb 2010 22:35:17 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionstemplate rekursiv aufgerufen? on Mon, 22 Feb 2010 22:53:15 GMT]]></title><description><![CDATA[<p>DAS ist ein ganz anderer Fehler. Zum einen hast du eine Funktion swap im globalen Namensraum definiert, zum anderen hast du offenbar den Namensraum <code>std</code> , welcher auch eine Funktion swap enthält, in den globalen Namensraum ausgeleert.</p>
<p>Was kann man dagegen tun? Zuerst mal solltest du verstehen, warum das Problem überhaupt auftritt. Da es schon spät ist, mag ich jetzt keine ausführliche Erklärung geben, sondern dir ein paar Frage zur Recherche geben: Was sind Namensräume? Wozu sind sie gut? Was macht <code>using namespace</code> ? Was ist das gefährliche an <code>using namespace</code> in Headerdateien? Viele der antworten kannst du auch hier im Forum finden.</p>
<p>Mögliche Abhilfen:<br />
a) Irgendwo hast du ein <code>using namespace std</code> oder <code>using std::swap</code> . Entferne dies. Dies ist generell eine gute Idee, wenn das <code>using namespace</code> in einem Header stehen sollte.<br />
b) Gib deiner Funktion einen anderen Namen. Die einfachste Form der Abhilfe, aber so lernst du nichts Neues.<br />
c) Mach einen eigenen Namensraum für deine Funktionen und gib dann den vollständigen Namen an, wo sie benutzt werden. Dies ist sicherlich die lehrreichste Form der Abhilfe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1859849</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1859849</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 22 Feb 2010 22:53:15 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionstemplate rekursiv aufgerufen? on Mon, 22 Feb 2010 23:12:17 GMT]]></title><description><![CDATA[<p>aaah mir war überhaupt nicht klar, dass in std:: eine Funktion swap existiert..</p>
<p>Ja, ich kenne Namensräume, kenne die Gefahren (zumindest in der Theorie, hier hats geknallt), falls using namespace in ner Headerdatei ist hab ich möglicherweise Pech und kann keine anderen Namensräume mehr verwenden, etc.</p>
<p>c) habe ich noch nie gemacht, hast du Recht. Haben wir auch in der Uni noch nicht gemacht, aber es schadet da nicht mich zu informieren.</p>
<p>Also ganz herzlichen Dank für deine kompetente, freundliche und wie immer hier unglaublich schnelle 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/1859852</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1859852</guid><dc:creator><![CDATA[jakap]]></dc:creator><pubDate>Mon, 22 Feb 2010 23:12:17 GMT</pubDate></item></channel></rss>