<?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[In Template auf Template-Funktion zugreifen]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>es geht hierbei um folgenden Code:</p>
<pre><code class="language-cpp">template &lt;class Type&gt;
int Wald::BlaetterZaehlen(Type derBaum)
{
  return 2*derBaum.get&lt;int&gt;(&quot;Blatt&quot;);
}
</code></pre>
<p>In dieser Template-Funktion dürfen also nur Objekte eingehen, die eine GET-Templatefunktion besitzen. Natürlich wäre es schöner, dies über eine Oberklasse mit virtuellen Deklarationen zu lösen, das ist in der aktuellen Programmstruktur aber nicht so ohne weiteres möglich bzw. begründbar (&quot;historisch gewachsen&quot; nennt man das glaube ich <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>Beim Kompilieren (g++) kommt folgender Fehler:<br />
Wald.cpp:17:24: error: expected primary-expression before ‘int’<br />
Wald.cpp:17:24: error: expected ‘;’ before ‘int’<br />
Wald.cpp:17:27: error: expected unqualified-id before ‘&gt;’ token<br />
(Zeile 17 ist &quot;return 2*...&quot;)<br />
Kurz: Er erkennt nicht, dass es sich um eine Template-Funktion handelt.</p>
<p>Mir wurde gesagt, dass auch die Implementierung eines Templates in der Header-Datei zu erfolgen hat. Aber auch das hat das Problem nicht behoben.</p>
<p>Was mache ich falsch? Jeglicher Hinweis wäre super!</p>
<p>Grüße<br />
Thorolf</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/286083/in-template-auf-template-funktion-zugreifen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 21 Aug 2026 02:34:58 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/286083.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 03 May 2011 12:36:40 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to In Template auf Template-Funktion zugreifen on Tue, 03 May 2011 12:36:40 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>es geht hierbei um folgenden Code:</p>
<pre><code class="language-cpp">template &lt;class Type&gt;
int Wald::BlaetterZaehlen(Type derBaum)
{
  return 2*derBaum.get&lt;int&gt;(&quot;Blatt&quot;);
}
</code></pre>
<p>In dieser Template-Funktion dürfen also nur Objekte eingehen, die eine GET-Templatefunktion besitzen. Natürlich wäre es schöner, dies über eine Oberklasse mit virtuellen Deklarationen zu lösen, das ist in der aktuellen Programmstruktur aber nicht so ohne weiteres möglich bzw. begründbar (&quot;historisch gewachsen&quot; nennt man das glaube ich <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>Beim Kompilieren (g++) kommt folgender Fehler:<br />
Wald.cpp:17:24: error: expected primary-expression before ‘int’<br />
Wald.cpp:17:24: error: expected ‘;’ before ‘int’<br />
Wald.cpp:17:27: error: expected unqualified-id before ‘&gt;’ token<br />
(Zeile 17 ist &quot;return 2*...&quot;)<br />
Kurz: Er erkennt nicht, dass es sich um eine Template-Funktion handelt.</p>
<p>Mir wurde gesagt, dass auch die Implementierung eines Templates in der Header-Datei zu erfolgen hat. Aber auch das hat das Problem nicht behoben.</p>
<p>Was mache ich falsch? Jeglicher Hinweis wäre super!</p>
<p>Grüße<br />
Thorolf</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2057738</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2057738</guid><dc:creator><![CDATA[Touny]]></dc:creator><pubDate>Tue, 03 May 2011 12:36:40 GMT</pubDate></item><item><title><![CDATA[Reply to In Template auf Template-Funktion zugreifen on Tue, 03 May 2011 12:47:58 GMT]]></title><description><![CDATA[<p>Du musst schreiben:</p>
<pre><code class="language-cpp">return 2*derBaum.template get&lt;int&gt;(&quot;Blatt&quot;);
</code></pre>
<p>Grund: der Compiler kann nicht wissen, dass <code>get</code> ein Template ist, also interpretiert er die spitzen Klammern als Vergleiche und nicht als Angabe einer Templateparameterliste. Und ein Vergleich mit einem Typen gibt natürlich einen Fehler. Mit dem <code>template</code> -Schlüsselwort sagst du dem Compiler explizit, dass <code>get</code> ein Template ist und <code>&lt;int&gt;</code> die dazugehörige Templateparameterliste.</p>
<p>Wenn der Fall öfters vorkommt und dir das ständige <code>template</code> zu aufwändig ist, kannst du dir dafür eine freie Funktion schreiben, z.B.</p>
<pre><code class="language-cpp">template&lt;class T, class Baum&gt; inline int get(Baum b, char* s) { return b.template get&lt;T&gt;(s); }
...
return 2*get&lt;int&gt;(derBaum, &quot;Blatt&quot;);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2057746</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2057746</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Tue, 03 May 2011 12:47:58 GMT</pubDate></item><item><title><![CDATA[Reply to In Template auf Template-Funktion zugreifen on Tue, 03 May 2011 13:12:33 GMT]]></title><description><![CDATA[<p>Es funktioniert! Das habe ich ja vorher noch nie gebraucht.</p>
<p>Vielen Dank für die schnelle und kompetente Hilfe, ipsec.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2057764</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2057764</guid><dc:creator><![CDATA[Touny]]></dc:creator><pubDate>Tue, 03 May 2011 13:12:33 GMT</pubDate></item></channel></rss>