<?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[Problem mit vererbten Template-Klassen]]></title><description><![CDATA[<p>Hi,</p>
<p>habe folgendes Problem:</p>
<pre><code class="language-cpp">template&lt;class T&gt;
class B: public A {
protected:
  char *name;
//...
};

template&lt;class T, char *chn, int len&gt;
class C : public B&lt;T&gt; {
public:
  C( char *nam ): B( nam, chn, len ) {} // line 70
  void set_name( char *nam ) { name = nam; } // line 71
//...
};
</code></pre>
<p>Der Compiler spuckt eklige Fehlermeldungen aus:</p>
<p>g++ 4.2.1 schrieb:</p>
<blockquote>
<p>70: error: class ‘C&lt;T, chn, len&gt;’ does not have any field named ‘B’<br />
71: error: ‘name’ was not declared in this scope</p>
</blockquote>
<p>Scheinbar erkennt er seine eigene Basis nicht wirklich?</p>
<p>Wenn man in der Zeile mit den !!! das name durch B&lt;T&gt;::name ersetzt, geht es plötzlich.</p>
<p>Bemerkung:<br />
Das war ursprünglich ein MSVC-Projekt. Ich wollte es nun für Linux mitm g++ 4.2.1 übersetzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/206708/problem-mit-vererbten-template-klassen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 10 Oct 2026 14:48:40 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/206708.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 27 Feb 2008 19:52:53 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit vererbten Template-Klassen on Wed, 27 Feb 2008 19:52:53 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>habe folgendes Problem:</p>
<pre><code class="language-cpp">template&lt;class T&gt;
class B: public A {
protected:
  char *name;
//...
};

template&lt;class T, char *chn, int len&gt;
class C : public B&lt;T&gt; {
public:
  C( char *nam ): B( nam, chn, len ) {} // line 70
  void set_name( char *nam ) { name = nam; } // line 71
//...
};
</code></pre>
<p>Der Compiler spuckt eklige Fehlermeldungen aus:</p>
<p>g++ 4.2.1 schrieb:</p>
<blockquote>
<p>70: error: class ‘C&lt;T, chn, len&gt;’ does not have any field named ‘B’<br />
71: error: ‘name’ was not declared in this scope</p>
</blockquote>
<p>Scheinbar erkennt er seine eigene Basis nicht wirklich?</p>
<p>Wenn man in der Zeile mit den !!! das name durch B&lt;T&gt;::name ersetzt, geht es plötzlich.</p>
<p>Bemerkung:<br />
Das war ursprünglich ein MSVC-Projekt. Ich wollte es nun für Linux mitm g++ 4.2.1 übersetzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1464336</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1464336</guid><dc:creator><![CDATA[voidpointer]]></dc:creator><pubDate>Wed, 27 Feb 2008 19:52:53 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit vererbten Template-Klassen on Wed, 27 Feb 2008 21:04:15 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">void set_name( char *nam ) { this-&gt;name = nam; } // line 71
</code></pre>
<p>dann funktioniert es. MSVC nimmt es da nicht so genau <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="🙂"
    /><br />
Immer this-&gt; verwenden, wenn man in einer template Klasse auf Member und Methoden der Basis template Klasse zufreift.<br />
Begründung &quot;C++ Templates - The complete Guide&quot; Abschnitt 9.4</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1464385</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1464385</guid><dc:creator><![CDATA[muffmolch]]></dc:creator><pubDate>Wed, 27 Feb 2008 21:04:15 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit vererbten Template-Klassen on Wed, 27 Feb 2008 21:06:36 GMT]]></title><description><![CDATA[<p>Hmm damit ist aber das Konstruktorproblem noch nicht gelöst o_O<br />
Warum erkennt die Klasse C nicht die Klasse B als Subobjekt an?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1464392</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1464392</guid><dc:creator><![CDATA[voidpointer]]></dc:creator><pubDate>Wed, 27 Feb 2008 21:06:36 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit vererbten Template-Klassen on Wed, 27 Feb 2008 21:15:23 GMT]]></title><description><![CDATA[<p>na, weil du keinen Typ angegeben hast. B ist eine template Klasse:</p>
<pre><code class="language-cpp">C( char *nam ): B&lt; T &gt;( nam, chn, len ) {} // line 70
</code></pre>
<p>Ohne den Parameter &lt;T&gt; denkt er du möchtest eine member-Variable ansprechen, daher die Medlung, dass es kein field B in Klasse C gibt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1464397</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1464397</guid><dc:creator><![CDATA[muffmolch]]></dc:creator><pubDate>Wed, 27 Feb 2008 21:15:23 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit vererbten Template-Klassen on Thu, 28 Feb 2008 08:45:53 GMT]]></title><description><![CDATA[<p>Ok, aber ist die this-Methode nicht langsamer, da er hier erst den Pointer dereferenzieren muss? Gibt es keine einfachere Methode?</p>
<p>Ich müsste jetzt in 100 Zeilen noch this hinzufügen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":-("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1464548</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1464548</guid><dc:creator><![CDATA[voidpointer]]></dc:creator><pubDate>Thu, 28 Feb 2008 08:45:53 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit vererbten Template-Klassen on Thu, 28 Feb 2008 08:53:20 GMT]]></title><description><![CDATA[<p>nein, das ist nicht langsamer...<br />
es gibt sich i.A. nichts, ob du</p>
<pre><code class="language-cpp">this-&gt;m_val = 0;
</code></pre>
<p>oder</p>
<pre><code class="language-cpp">m_val = 0;
</code></pre>
<p>schreibst. Sowas löst der Compiler auf. Bei Template-Klassen, die von Template-Klassen aufgelöst sind ist das mit dem this für den Compiler nicht immer eindeutig, daher MUSS man es dort oft verwenden. Zeit kostet es keine, nur die, die, die du zum Tippen benötigst <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/1464554</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1464554</guid><dc:creator><![CDATA[muffmolch]]></dc:creator><pubDate>Thu, 28 Feb 2008 08:53:20 GMT</pubDate></item></channel></rss>