<?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[FunktionsTemplates in KlassenTemplates]]></title><description><![CDATA[<p>Hi Leute <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>ich hab mal ne Frage zu Templates wie der Titel schon verrät ;-).<br />
Ich ein eigenes kleines KlassenTemplate geschrieben(zur Übung weil ich grad c++ lern), in diesem KlassenTemplate hab ich ein FunktionsTemplate deklariert.<br />
KlassenTemplates und FunktionsTemplates für sich alleine funktionieren aber gemixt klappt gar nichts mehr!</p>
<p>Hier mal mein code in der cpp Datei :</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &quot;Demo.h&quot;
using namespace std;

void main()
{
	Demo&lt;int&gt; Test;

	Test.berechne();

}
</code></pre>
<p>Und dies ist der Code der Demo.h:</p>
<pre><code class="language-cpp">template&lt;class cT&gt; class Demo
{
	private:

	public:

		Demo(){}
		~Demo(){}

		template&lt;class fT&gt; fT berechne();

		cT var2;
};

template&lt;class cT&gt; template&lt;class fT&gt;Demo&lt;cT&gt;::berechne()
{
	fT ergebnis = var1 + var2;

	cout &lt;&lt; ergebnis &lt;&lt; endl;

	return ergebnis;

}
</code></pre>
<p>Ich hab den Code aus dem C / C++ Kompendium abgetippt,<br />
Tippfehler sind keine drin aber es funktioniert trotzdem nich.</p>
<p>Wäre Klasse wenn ihr mir helfen könntet und mir sagen könntet wie ich FunktionsTemplates ausserhalb von KlassenTemplates richtig definiere und in der main richtig aufrufe.</p>
<p>..vorab schon mal vielen Dank für eure Mühe <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>ShadowEater</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/166472/funktionstemplates-in-klassentemplates</link><generator>RSS for Node</generator><lastBuildDate>Tue, 15 Sep 2026 11:49:54 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/166472.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 29 Nov 2006 16:23:21 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to FunktionsTemplates in KlassenTemplates on Wed, 29 Nov 2006 16:23:21 GMT]]></title><description><![CDATA[<p>Hi Leute <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>ich hab mal ne Frage zu Templates wie der Titel schon verrät ;-).<br />
Ich ein eigenes kleines KlassenTemplate geschrieben(zur Übung weil ich grad c++ lern), in diesem KlassenTemplate hab ich ein FunktionsTemplate deklariert.<br />
KlassenTemplates und FunktionsTemplates für sich alleine funktionieren aber gemixt klappt gar nichts mehr!</p>
<p>Hier mal mein code in der cpp Datei :</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &quot;Demo.h&quot;
using namespace std;

void main()
{
	Demo&lt;int&gt; Test;

	Test.berechne();

}
</code></pre>
<p>Und dies ist der Code der Demo.h:</p>
<pre><code class="language-cpp">template&lt;class cT&gt; class Demo
{
	private:

	public:

		Demo(){}
		~Demo(){}

		template&lt;class fT&gt; fT berechne();

		cT var2;
};

template&lt;class cT&gt; template&lt;class fT&gt;Demo&lt;cT&gt;::berechne()
{
	fT ergebnis = var1 + var2;

	cout &lt;&lt; ergebnis &lt;&lt; endl;

	return ergebnis;

}
</code></pre>
<p>Ich hab den Code aus dem C / C++ Kompendium abgetippt,<br />
Tippfehler sind keine drin aber es funktioniert trotzdem nich.</p>
<p>Wäre Klasse wenn ihr mir helfen könntet und mir sagen könntet wie ich FunktionsTemplates ausserhalb von KlassenTemplates richtig definiere und in der main richtig aufrufe.</p>
<p>..vorab schon mal vielen Dank für eure Mühe <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>ShadowEater</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1183918</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1183918</guid><dc:creator><![CDATA[ShadowEater]]></dc:creator><pubDate>Wed, 29 Nov 2006 16:23:21 GMT</pubDate></item><item><title><![CDATA[Reply to FunktionsTemplates in KlassenTemplates on Wed, 29 Nov 2006 16:37:16 GMT]]></title><description><![CDATA[<p>ShadowEater schrieb:</p>
<blockquote>
<p>...</p>
<pre><code class="language-cpp">...
	Demo&lt;int&gt; Test;

	Test.berechne();
...
</code></pre>
<p>Und dies ist der Code der Demo.h:</p>
<pre><code class="language-cpp">template&lt;class cT&gt; class Demo
{
...
		template&lt;class fT&gt; fT berechne();
...
</code></pre>
</blockquote>
<p>Der Typ fT ist unbestimmt !</p>
<p>Bedenke: Du hast 2 Typen:<br />
cT : KlassenTyp<br />
fT : FunktionsTyp</p>
<p>cT legst Du in der Deklaration von Test fest (int) und<br />
fT könnte er sich aus Parametern von berechne() erschließen ... wenn sie denn welche hätte (bei Klassen geht diese &quot;automatische Bestimmung&quot; aber nicht).<br />
So musst Du angeben, welche Funktion Du mit Test.berechne() aufrufen willst.<br />
z.B. Test.berechne&lt;long&gt;();</p>
<p>Du definierst eine <em>Gruppe von Klassen</em> (für jeden Typ von var eine), von denen jede eine <em>Gruppe von Funktionen</em> enthalten kann (jeweils für jeden Rückgabetyp von berechne() eine).</p>
<p>Ein ähnliches (aber besseres ;)) Beispiel:</p>
<pre><code class="language-cpp">template&lt;class cT&gt; class Demo
{
    public:
        template&lt;class fT&gt; fT berechne(fT arg);
        cT var2;
};
</code></pre>
<p>Damit kannst Du für jede &quot;Demo-Variante&quot; (abhängig vom Typ cT) einen ganzen Satz von berechne()-Funktionen erzeugen:</p>
<pre><code class="language-cpp">int main() {
    Demo&lt;int&gt; intDemo;
    Demo&lt;string&gt; strDemo;
    string s;

    intDemo.berechne&lt;int&gt;(1);
    intDemo.berechne(2); // macht dasselbe: Automatische Typbestimmung
    intDemo.berechne(s);

    strDemo.berechne(s);
    strDemo.berechne(3);
    return 0;
}
</code></pre>
<p>Hiermit erzeugst Du 2 Objekte unterschiedlicher Klassen (Demo&lt;int&gt; und Demo&lt;string&gt;), von denen jede 2 unterschiedliche Funktionen (berechne&lt;int&gt;() und berechne&lt;string&gt;()) besitzen ....</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1183924</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1183924</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 29 Nov 2006 16:37:16 GMT</pubDate></item><item><title><![CDATA[Reply to FunktionsTemplates in KlassenTemplates on Wed, 29 Nov 2006 16:33:18 GMT]]></title><description><![CDATA[<p>Und außerdem fehlt bei der Definition der Methode noch die Angabe des Rückgabewerts.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1183928</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1183928</guid><dc:creator><![CDATA[GPC]]></dc:creator><pubDate>Wed, 29 Nov 2006 16:33:18 GMT</pubDate></item><item><title><![CDATA[Reply to FunktionsTemplates in KlassenTemplates on Wed, 29 Nov 2006 17:23:52 GMT]]></title><description><![CDATA[<p>Nachtrag: Per Ausprobieren scheint es mir so, dass ein &quot;overloading per Returntyp&quot; bei templates erlaubt ist - was man ohne templates nicht darf. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /><br />
Stimmt das ?</p>
<p>Beispiel:</p>
<pre><code class="language-cpp">class A {
   public:
   template &lt;typename T&gt; T f() { 
      T intern('s'); 
      cout &lt;&lt; &quot;f(void): &quot; &lt;&lt; intern &lt;&lt; &quot;\n&quot;; 
      return intern;
   }
// int g() { cout &lt;&lt; &quot;g()::&quot;; return f&lt;int&gt;(); }
// char g() { cout &lt;&lt; &quot;g()::&quot;; return f&lt;char&gt;(); }
};

int main() {
   A a;
   a.f&lt;int&gt;();
   a.f&lt;char&gt;();
	return 0;
}
</code></pre>
<p>funktioniert tadellos und liefert die erwarteten</p>
<p>f(void): 115<br />
f(void): s</p>
<p>Die auskommentierten Zeilen dürfen (verständlicherweise) nicht sein.<br />
Macht der der gcc einfach, &quot;weil er's kann&quot; (schließlich sage ihm ja, welche Funktion ich haben will, während er bei g() natürlich nicht wissen kann, welchen Typ ich gerne zurückhätte)....<br />
Oder ist der da standardkonform ?</p>
<p>GPC schrieb:</p>
<blockquote>
<p>Und außerdem fehlt bei der Definition der Methode noch die Angabe des Rückgabewerts.</p>
</blockquote>
<p>Stimmt natürlich - ist mir aber gar nicht aufgefallen...</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1183967</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1183967</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 29 Nov 2006 17:23:52 GMT</pubDate></item><item><title><![CDATA[Reply to FunktionsTemplates in KlassenTemplates on Thu, 30 Nov 2006 07:22:16 GMT]]></title><description><![CDATA[<p>Ja, das ist erlaubt, ist aber kein Overloading mehr. Du hast eine Template-Funktion und entscheidest dich dann explizit für eine Spezialisierung dieser Funktion (dadurch, daß du den Template-Parameter f&lt;int&gt; etc angibst, legst du die Instanz fest).<br />
Aber genauso wie bei &quot;normalen&quot; Funktionen kann der Compiler nicht aus dem (vermuteten) Rückgabetyp entscheiden, welche Spezialisierung er verwenden soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1184191</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1184191</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 30 Nov 2006 07:22:16 GMT</pubDate></item><item><title><![CDATA[Reply to FunktionsTemplates in KlassenTemplates on Thu, 30 Nov 2006 08:31:57 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Ja, das ist erlaubt, ist aber kein Overloading mehr....</p>
</blockquote>
<p>Ach so !<br />
Dann ist also das:</p>
<pre><code class="language-cpp">class A {
   public:
   template &lt;typename T&gt; T f() { ... }
};
</code></pre>
<p>nicht vergleichbar mit</p>
<pre><code class="language-cpp">class A {
   public:
   int f() { ... }
   char f() { ... } // nicht erlaubt !!
};
</code></pre>
<p>sondern eher mit</p>
<pre><code class="language-cpp">class A {
   public:
   int f_int() { ... }
   char f_char() { ... }
};
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f4a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--light_bulb"
      title=":bulb:"
      alt="💡"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f4a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--light_bulb"
      title=":bulb:"
      alt="💡"
    /></p>
<p>ist irgendwie auch logisch (und ist sich sogar syntaktisch sehr ähnlich).<br />
Hach schön: Man lernt nie aus !! C++ ist einfach die beste aller Sprachen !!! :xmas2:</p>
<p>Danke,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1184249</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1184249</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 30 Nov 2006 08:31:57 GMT</pubDate></item><item><title><![CDATA[Reply to FunktionsTemplates in KlassenTemplates on Fri, 01 Dec 2006 11:55:40 GMT]]></title><description><![CDATA[<p>D*A*N*K*E* <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="👍"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /></p>
<p>sry dass ich nicht früher aufgetaucht bin aber ich war echt im Stress !</p>
<p>Danke nochmal, ihr seig die BESTEN <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="👍"
    /> <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="👍"
    /> <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="👍"
    /> <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>ShadowEater <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/1185237</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1185237</guid><dc:creator><![CDATA[ShadowEater]]></dc:creator><pubDate>Fri, 01 Dec 2006 11:55:40 GMT</pubDate></item></channel></rss>