<?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[[gelöst] Template Klasse ableiten]]></title><description><![CDATA[<p>Muss ich da etwas beachten?<br />
Ich hab jetzt eine Subclass erstellt und die Variablen in der Oberklasse protected gesetzt, seit ich meine Klasse als Template laufen lasse, kann ich aber in der abgeleiteten Klasse nicht mehr auf die protected Daten zugreifen.</p>
<p>abegleitet hab ich so</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
class ExtListe:public Liste&lt;T&gt;{};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/245183/gelöst-template-klasse-ableiten</link><generator>RSS for Node</generator><lastBuildDate>Fri, 18 Sep 2026 21:55:55 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/245183.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 10 Jul 2009 17:30:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [gelöst] Template Klasse ableiten on Fri, 10 Jul 2009 19:21:27 GMT]]></title><description><![CDATA[<p>Muss ich da etwas beachten?<br />
Ich hab jetzt eine Subclass erstellt und die Variablen in der Oberklasse protected gesetzt, seit ich meine Klasse als Template laufen lasse, kann ich aber in der abgeleiteten Klasse nicht mehr auf die protected Daten zugreifen.</p>
<p>abegleitet hab ich so</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
class ExtListe:public Liste&lt;T&gt;{};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1740563</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740563</guid><dc:creator><![CDATA[codyjack]]></dc:creator><pubDate>Fri, 10 Jul 2009 19:21:27 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Template Klasse ableiten on Fri, 10 Jul 2009 18:35:12 GMT]]></title><description><![CDATA[<p>codyjack schrieb:</p>
<blockquote>
<p>Muss ich da etwas beachten?</p>
</blockquote>
<p>Nö.</p>
<p>codyjack schrieb:</p>
<blockquote>
<p>Ich hab jetzt eine Subclass erstellt und die Variablen in der Oberklasse protected gesetzt, seit ich meine Klasse als Template laufen lasse, kann ich aber in der abgeleiteten Klasse nicht mehr auf die protected Daten zugreifen.</p>
</blockquote>
<p>Müsste noch gehen. Aber Du verschweigst bestimmt das ein oder andere Detail.</p>
<p>codyjack schrieb:</p>
<blockquote>
<p>abegleitet hab ich so</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
class ExtListe:public Liste&lt;T&gt;{};
</code></pre>
</blockquote>
<p>Geht das auch noch etwas ausführlicher?</p>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1740617</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740617</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Fri, 10 Jul 2009 18:35:12 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Template Klasse ableiten on Fri, 10 Jul 2009 18:37:24 GMT]]></title><description><![CDATA[<p>klar gehts auch ausführlicher <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;typename T&gt;
class Liste {
protected:
    int _size;
    int _last;
    int _pos;
    T *values;
    bool isFull();
    bool isEmpty();

    void increase();

public:
    Liste();
    ~Liste();
    void insert(T key);
    T get(T key);
    void erase(T key);
    T top();
    void pop();

};
//********************************************************************
template &lt;typename T&gt;
class ExtListe:public Liste&lt;T&gt;{
    public:
        bool contains(T key);
        void erase(T val);
        string toScreen();

};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1740619</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740619</guid><dc:creator><![CDATA[codyjack]]></dc:creator><pubDate>Fri, 10 Jul 2009 18:37:24 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Template Klasse ableiten on Fri, 10 Jul 2009 18:47:48 GMT]]></title><description><![CDATA[<p>codyjack schrieb:</p>
<blockquote>
<p>Muss ich da etwas beachten?</p>
</blockquote>
<p>Ja. Der Scope einer Basisklasse, welche von einem Templateparameter abhängig ist, wird nicht automatisch in die Suche nach Typen, Variablen, Funktionen usw. aufgenommen.</p>
<p>Also kurz:</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
struct Base
{
  void foo() { }
};

template&lt;typename T&gt;
struct Derived
  : public Base&lt;T&gt; // &lt;- Basisklasse ist vom Templateparameter abhängig.
{
  void bar()
  {
    foo(); // Per Standard ein Fehler, wird nicht gefunden.
    this-&gt;foo(); // geht.
    Base&lt;T&gt;::foo(); // geht.
  }
};
</code></pre>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1740625</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740625</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Fri, 10 Jul 2009 18:47:48 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Template Klasse ableiten on Fri, 10 Jul 2009 18:58:38 GMT]]></title><description><![CDATA[<p>ah Danke, damit gehts, aber gibts keine Möglichkeit ohne Scope Operator zu arbeiten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1740630</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740630</guid><dc:creator><![CDATA[codyjack]]></dc:creator><pubDate>Fri, 10 Jul 2009 18:58:38 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Template Klasse ableiten on Fri, 10 Jul 2009 19:08:17 GMT]]></title><description><![CDATA[<p>codyjack schrieb:</p>
<blockquote>
<p>ah Danke, damit gehts, aber gibts keine Möglichkeit ohne Scope Operator zu arbeiten?</p>
</blockquote>
<p>Wie schon gezeigt über <code>this</code> . Ansonsten, wenn du gewisse Funktionen Objekte oder ähnliches mehrmals brauchst, dann kannst du diese Namen manuell raufziehen:</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
struct Base
{
  void foo() { }
};

template&lt;typename T&gt;
struct Derived
  : public Base&lt;T&gt; // &lt;- Basisklasse ist vom Templateparameter abhängig.
{
  using Base&lt;T&gt;::foo; // raufziehen.

  void bar()
  {
    foo(); // funktioniert
  }
};
</code></pre>
<p>Das geht aber nicht immer und man sollte bei solchen Sache vorsichtig sein, da es plötzlich zu ungewollten Überladungen statt Überdeckungen kommen könnte.<br />
Auch ist es nicht wirklich sehr schön, wenn man viele solcher <code>using</code> Anweisungen hat <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>Wenn du übrigens eine Funktion über <code>Base&lt;T&gt;::foo()</code> aufrufst, sollte dir auch bewusst sein, dass die Funktion nicht virtuell aufgerufen wird, bei <code>this-&gt;foo()</code> allerdings schon.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1740635</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740635</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Fri, 10 Jul 2009 19:08:17 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Template Klasse ableiten on Fri, 10 Jul 2009 19:10:35 GMT]]></title><description><![CDATA[<p>Wo ist denn die Problemstelle und welche Fehlermeldung bekommst Du?!</p>
<p>Wenn ich raten müsste, würde ich auf das &quot;Zwei-Phasen-Lookup&quot; tippen:</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
struct foo
{
   int x;
};

template&lt;typename T&gt;
struct bar : foo&lt;T&gt;
{
   void blupp()
   {
      x = 23;  // &lt;-- Fehler, Compiler kennt x nicht
   }
};
</code></pre>
<p>Der Compiler verarbeitet so ein Template in zwei Phasen. Die erste Phase ist die Überprüfung <em>bevor</em> Du dieses Template spezialisiert (&quot;instantiierst&quot;). Die zweite Phase ist dann die Spezialisierung selbst, in der der Compiler für T einen bestimmten Typ einsetzt, und die Klasse erzeugt. In der ersten Phase versucht der Compiler schon möglichst viele Namen aufzulösen, damit Programmierfehler früh erkannt werden können.</p>
<p>In Deinem Fall ist die Basisklasse vom Template-Parameter abhängig. Das macht den Typ der Basisklasse zu einem &quot;abhängigen Typen&quot;. In der ersten Phase weiß der Compiler also nicht, was List&lt;T&gt; eigentlich genau ist, da T noch nicht weiter spezifiziert wurde. Aus diesem Grund kann der Compiler 'x' auch nicht zuordnen. Er geht davon aus, dass x nicht Teil der Basisklasse ist und sucht in anderen Namensräumen nach x.</p>
<p>Um das Problem zu beheben, musst Du dem Compiler signalisieren, dass es sich bei x um ein Element der Klasse handelt:</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
struct bar : foo&lt;T&gt;
{
   void blupp()
   {
      this-&gt;x = 23;  // OK
   }
};
</code></pre>
<p>Warum funktioniert das so? Naja, der Compiler sieht das &quot;this-&gt;&quot; und weiß, jetzt muss ein Mitglied der Klasse kommen. Und da die Klasse von einem abhängigen Typen ableitet, wird die Namensauflösung von x in die &quot;zweite Phase&quot; verschoben.</p>
<p>Mehr dazu gibt es in schlauen C++ Büchern.</p>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1740637</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740637</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Fri, 10 Jul 2009 19:10:35 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Template Klasse ableiten on Fri, 10 Jul 2009 19:16:48 GMT]]></title><description><![CDATA[<p>Mist! ... war ich wohl zu langsam diesmal. <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>Bei <code>using</code> und <code>basisklasse::</code> sollte man in Kombination mit virtuellen Funktionen aber aufpassen.</p>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1740647</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740647</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Fri, 10 Jul 2009 19:16:48 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Template Klasse ableiten on Fri, 10 Jul 2009 19:19:57 GMT]]></title><description><![CDATA[<p>OK Vielen Dank soweit <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/1740648</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740648</guid><dc:creator><![CDATA[codyjack]]></dc:creator><pubDate>Fri, 10 Jul 2009 19:19:57 GMT</pubDate></item></channel></rss>