<?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[protected-Elemente in abgeleitet Klasse nicht deklariert? oO [templ.Klasse]]]></title><description><![CDATA[<p>Hi,</p>
<p>sorry, ich bin gerade etwas n00bish und nerve wahrscheinlich schon mit meinen Fragen, danke für die hier investierte Zeit schon Mal im Voraus.</p>
<p>Ich habe eine Vererbung...</p>
<pre><code class="language-cpp">template&lt;class T&gt;
class Base
{
protected:
T* var_;
};

template&lt;class T&gt;
class Node : public Base&lt;T&gt;
{
public:
Node();
};

template&lt;class T&gt;
Node&lt;T&gt;::Node()
{
*var_ = 0/* irgendwas*/;
}
</code></pre>
<p>in *var_ meldet er mir: var_ undeclared (first use this function)...</p>
<p>mit this-&gt; davor funktioniert's allerdings.</p>
<p>Liegt das daran, dass der Base-ctor seine Variable initialisieren möchte und dass nicht die abgeleitete Klasse machen soll? Das würde heißen, dass es in einer gewöhnlichen Methode von Node keine derartigen Probleme gäbe.</p>
<p>Aber wenn dem so ist...<br />
Wie soll ich dann eine Situation darstellen, in der zwei Klassen die gleichen Attribute (und teilweise dafür geschriebene Methoden) besitzen, aber halt unterschiedliche ctor dafür nutzen?<br />
Die Lösung wäre natürlich darin gegeben, dass ich entsprechende set- und get-Methoden für die Attribute schreibe und die Attribute dann in den private-Bereich von Base einordne... Würde natürlich der Theorie zusagen, die meint, dass protected-Attribute unschöner Stil sind...</p>
<p>MfG Eisflamme <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/topic/150456/protected-elemente-in-abgeleitet-klasse-nicht-deklariert-oo-templ-klasse</link><generator>RSS for Node</generator><lastBuildDate>Sat, 05 Sep 2026 17:14:37 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/150456.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 16 Jun 2006 16:13:11 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to protected-Elemente in abgeleitet Klasse nicht deklariert? oO [templ.Klasse] on Fri, 16 Jun 2006 16:16:25 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>sorry, ich bin gerade etwas n00bish und nerve wahrscheinlich schon mit meinen Fragen, danke für die hier investierte Zeit schon Mal im Voraus.</p>
<p>Ich habe eine Vererbung...</p>
<pre><code class="language-cpp">template&lt;class T&gt;
class Base
{
protected:
T* var_;
};

template&lt;class T&gt;
class Node : public Base&lt;T&gt;
{
public:
Node();
};

template&lt;class T&gt;
Node&lt;T&gt;::Node()
{
*var_ = 0/* irgendwas*/;
}
</code></pre>
<p>in *var_ meldet er mir: var_ undeclared (first use this function)...</p>
<p>mit this-&gt; davor funktioniert's allerdings.</p>
<p>Liegt das daran, dass der Base-ctor seine Variable initialisieren möchte und dass nicht die abgeleitete Klasse machen soll? Das würde heißen, dass es in einer gewöhnlichen Methode von Node keine derartigen Probleme gäbe.</p>
<p>Aber wenn dem so ist...<br />
Wie soll ich dann eine Situation darstellen, in der zwei Klassen die gleichen Attribute (und teilweise dafür geschriebene Methoden) besitzen, aber halt unterschiedliche ctor dafür nutzen?<br />
Die Lösung wäre natürlich darin gegeben, dass ich entsprechende set- und get-Methoden für die Attribute schreibe und die Attribute dann in den private-Bereich von Base einordne... Würde natürlich der Theorie zusagen, die meint, dass protected-Attribute unschöner Stil sind...</p>
<p>MfG Eisflamme <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/1079055</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1079055</guid><dc:creator><![CDATA[Mis2com]]></dc:creator><pubDate>Fri, 16 Jun 2006 16:16:25 GMT</pubDate></item><item><title><![CDATA[Reply to protected-Elemente in abgeleitet Klasse nicht deklariert? oO [templ.Klasse] on Fri, 16 Jun 2006 16:25:03 GMT]]></title><description><![CDATA[<p>das funktioniert hier nicht, weil klassen templates als basis beim unqualifizierten aufruf nicht durchsucht werden (können). schließlich könnte das basistemplate ja spezialisierungen enthalten, die den bezeichner haben und andere, die ihn nicht haben. ohne T zu kennen, kann der compiler das nicht entscheiden. hier wird ein qualifizierter aufruf oder ein aufruf über this benötigt.</p>
<pre><code class="language-cpp">template&lt;class T&gt;
Node&lt;T&gt;::Node()
{
*Base&lt;T&gt;::var_ = 0;
// oder
this-&gt;var_ = 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1079058</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1079058</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 16 Jun 2006 16:25:03 GMT</pubDate></item><item><title><![CDATA[Reply to protected-Elemente in abgeleitet Klasse nicht deklariert? oO [templ.Klasse] on Fri, 16 Jun 2006 16:27:34 GMT]]></title><description><![CDATA[<p>Mis2com schrieb:</p>
<blockquote>
<p>Hi,</p>
<p>sorry, ich bin gerade etwas n00bish und nerve wahrscheinlich schon mit meinen Fragen, danke für die hier investierte Zeit schon Mal im Voraus.</p>
<p>Ich habe eine Vererbung...</p>
<pre><code class="language-cpp">template&lt;class T&gt;
class Base
{
protected:
T* var_;
};

template&lt;class T&gt;
class Node : public Base&lt;T&gt;
{
public:
Node();
};

template&lt;class T&gt;
Node&lt;T&gt;::Node()
{
*var_ = 0/* irgendwas*/;
}
</code></pre>
<p>in *var_ meldet er mir: var_ undeclared (first use this function)...</p>
</blockquote>
<p>Das liegt daran, dass var_ in dem Namensbereich von Base&lt;T&gt; liegt (edit: siehe camper). Also musst du es davor schreiben:</p>
<pre><code class="language-cpp">template&lt;class T&gt;
Node&lt;T&gt;::Node() {
    *Base&lt;T&gt;::var_ = 0/* irgendwas*/;
}
</code></pre>
<p>oder du benutzt using:</p>
<pre><code class="language-cpp">template&lt;class T&gt;
class Node : public Base&lt;T&gt; {
    public:
        using Base&lt;T&gt;::var_;
        Node();
};
</code></pre>
<p>mfg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1079059</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1079059</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Fri, 16 Jun 2006 16:27:34 GMT</pubDate></item><item><title><![CDATA[Reply to protected-Elemente in abgeleitet Klasse nicht deklariert? oO [templ.Klasse] on Fri, 16 Jun 2006 22:10:59 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>okay, so viel zur Lösung, danke. <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>Ich muss aber zugeben, ich hab' noch nicht verstanden, was genau das Problem ist.<br />
Wenn in der entsprechenden Template-Klasse ein Attribut besteht, wieso ist es dann nötig zu wissen, welchen Typ das hat? T beeinflusst ja nicht die Klassenhirarchie. Das einzige, was undefiniert ist, ist doch, ob z.B. operator= definiert ist oder so, aber das ist nicht das Problem, oder?</p>
<p>Danke schon Mal !!</p>
<p>MfG Eisflamme</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1079202</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1079202</guid><dc:creator><![CDATA[Mis2com]]></dc:creator><pubDate>Fri, 16 Jun 2006 22:10:59 GMT</pubDate></item><item><title><![CDATA[Reply to protected-Elemente in abgeleitet Klasse nicht deklariert? oO [templ.Klasse] on Fri, 16 Jun 2006 23:29:30 GMT]]></title><description><![CDATA[<p>Mis2com schrieb:</p>
<blockquote>
<p>Wenn in der entsprechenden Template-Klasse ein Attribut besteht,</p>
</blockquote>
<p>genau das ist das steht ja eben nicht fest. das kann der compiler nicht wissen. bloß weil ein attribut im primärtemplate existiert, muss das nicht für eine spezialisierung gelten. und ohne kenntnis von T wissen wir nicht, ob eben diese spezialisierung oder aber das primärtemplate ausgewählt wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1079229</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1079229</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 16 Jun 2006 23:29:30 GMT</pubDate></item><item><title><![CDATA[Reply to protected-Elemente in abgeleitet Klasse nicht deklariert? oO [templ.Klasse] on Fri, 16 Jun 2006 23:38:17 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>hm...<br />
wenn T Attribut ist, durch welche Spezialisierung der Klasse mit einem bestimmten T kann man denn das Attribut dann ausschalten? oO<br />
Sorry, ich steig gerade net ganz durch. ^^</p>
<p>edit:<br />
Achso, es lassen sich ja auch Spezialisierungen der Templateklassen definieren und net nur instanzieren (&lt;- jetzt bin ich unsicher, ob die beiden Verben richtig angewendet wurden...) anfertigen, hab ich missachtet. Betrachtet es das für diesen Fall?<br />
Primärtemplate = Unspezialisierte Templateklasse?<br />
Und wieso ist durch this-&gt; dann klar, dass das Attribut besteht? Ist doch genau so ungewiss?</p>
<p>MfG Eisflamme</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1079235</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1079235</guid><dc:creator><![CDATA[Mis2com]]></dc:creator><pubDate>Fri, 16 Jun 2006 23:38:17 GMT</pubDate></item><item><title><![CDATA[Reply to protected-Elemente in abgeleitet Klasse nicht deklariert? oO [templ.Klasse] on Fri, 16 Jun 2006 23:40:21 GMT]]></title><description><![CDATA[<p>ok, simples beispiel:</p>
<pre><code class="language-cpp">template&lt;typename T&gt; struct Base
{
    T attribute;
    virtuel ~Base() {}
};
template&lt;typename T&gt; struct Derived : Base&lt;T&gt;
{
    Derived()
    {
        Base&lt;T&gt;::attribute = T();
    }
};

template&lt;typename T&gt; struct Base&lt;T*&gt;
{
     virtual ~Base() {}
};

Derived&lt;int&gt; foo;   // ok
Derived&lt;void*&gt; bar; // bumm, Base&lt;void*&gt; hat gar kein attribute, also kann der derived default konstruktor nicht instantiiert werden
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1079241</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1079241</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 16 Jun 2006 23:40:21 GMT</pubDate></item><item><title><![CDATA[Reply to protected-Elemente in abgeleitet Klasse nicht deklariert? oO [templ.Klasse] on Fri, 16 Jun 2006 23:46:40 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ok, danke, das verdeutlicht die Angelegenheit doch erheblich. <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>Aber ein this-&gt; macht für mich dennoch keinen Sinn:<br />
Wenn man so argumentiert, dass die Klasse das Attribut nicht zwangsläufig haben kann, dann macht this-&gt; auch keinen Sinn, zeigt this doch auf das eigene Objekt...</p>
<p>Kann sein, dass ich gerade Erbsen zähle, bin aber auch nicht sicher, ob ich da ganz auf der Glasbrücke laufe.</p>
<p>Danke jedenfalls für die 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="🙂"
    /><br />
ich geh jetzt schlafen, wünsche eine gute Nacht!</p>
<p>MfG Eisflamme</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1079244</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1079244</guid><dc:creator><![CDATA[Mis2com]]></dc:creator><pubDate>Fri, 16 Jun 2006 23:46:40 GMT</pubDate></item></channel></rss>