<?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[seltsames template-problem]]></title><description><![CDATA[<p>Hallo</p>
<pre><code class="language-cpp">template&lt;class T&gt;
struct Data
{
	T *ptr;
	unsigned count;
};
template&lt;class T&gt;
struct DataN : public Data&lt;T&gt;
{
	DataN(T *t)
	{
		ptr = t;
		count = 1;
	}
	~DataN() {delete ptr;}
};
</code></pre>
<p>warum schluckt das der msvc++ aber der c::b nicht? der code ist doch richtig??</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/241013/seltsames-template-problem</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 18:38:54 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/241013.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 14 May 2009 15:38:31 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to seltsames template-problem on Thu, 14 May 2009 15:38:31 GMT]]></title><description><![CDATA[<p>Hallo</p>
<pre><code class="language-cpp">template&lt;class T&gt;
struct Data
{
	T *ptr;
	unsigned count;
};
template&lt;class T&gt;
struct DataN : public Data&lt;T&gt;
{
	DataN(T *t)
	{
		ptr = t;
		count = 1;
	}
	~DataN() {delete ptr;}
};
</code></pre>
<p>warum schluckt das der msvc++ aber der c::b nicht? der code ist doch richtig??</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1710564</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1710564</guid><dc:creator><![CDATA[template&amp;lt;class user&amp;gt]]></dc:creator><pubDate>Thu, 14 May 2009 15:38:31 GMT</pubDate></item><item><title><![CDATA[Reply to seltsames template-problem on Thu, 14 May 2009 16:10:37 GMT]]></title><description><![CDATA[<blockquote>
<p>der code ist doch richtig??</p>
</blockquote>
<p>glaube ich nicht...</p>
<pre><code class="language-cpp">~DataN() {delete ptr;}
</code></pre>
<p>ptr ist hier schon nicht mehr da, da die untergeordneten objekte bereits zerstört sind...</p>
<p>die lösung ist aber ganz einfach - man gibt dem struct Data nen CTor und nen DTor - dann gehts nich nur, dann ists auch logisch <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
<p>also so in etwa:</p>
<pre><code class="language-cpp">template&lt;class T&gt;
struct Data
{ //evtl op= und copy-ctor verbieten?!
    T *ptr;
    unsigned count;

    Data (T* _ptr) : ptr(_ptr), count(1) {}
    Data () : ptr(nullptr), count(0) {}

    ~Data () { delete ptr; } //evtl noch auf count testen - weiß jz nicht genau, was Data sein soll und was count zählen soll - vll willste ja ne art shared_ptr nachbauen...
};

template&lt;class T&gt;
struct DataN : public Data&lt;T&gt;
{
    DataN(T *t) : Data (t)  {}
};
</code></pre>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1710578</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1710578</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Thu, 14 May 2009 16:10:37 GMT</pubDate></item><item><title><![CDATA[Reply to seltsames template-problem on Thu, 14 May 2009 16:24:35 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/16305">@unskilled</a>,<br />
Der Lösungsvorschlag ist zwar eine gute Idee, aber deine Begründung stimmt nicht. Auch <code>ptr</code> ist noch vorhanden, wenn der Destruktor aufgerufen wird. Der Fehler liegt hier woanders.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/8298">@template</a>&lt;class user&gt;,<br />
1. C::B ist kein Kompiler, sondern nur eine IDE. Aber ich nehme mal an, dass du den GCC verwendet hast.<br />
2. Deine Fehlerbeschreibung ist etwas sehr dürftig.<br />
3. Der Code ist laut Standard falsch, der MSVC ist mit dem Programmierer, wie so oft, etwas nachsichtiger.</p>
<p>Problem ist hier:<br />
Wenn die Basisklasse eine Template abhängige Klasse ist, dann wird der Scope dieser Klasse nicht herangezogen, um die unqualifizierten Namen aufzulösen. Ein kurzes Beispiel:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

template&lt;typename T&gt;
struct Base
{
  int i;
};

int i;

template&lt;typename T&gt;
struct Derived : public Base&lt;T&gt;
{
  Derived(int x)
  {
    i = x;
  }
};

int main()
{
  ::i = 25;
  Derived&lt;int&gt; d(10);

  std::cout &lt;&lt; ::i &lt;&lt; std::endl;

  return 0;
}
</code></pre>
<p>Die Ausgabe, auf einem Standard konformen Kompiler, ist hier 10. Obwohl man eigentlich eher 25 erwarten würde <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>Dein Code wäre so korrekt:</p>
<pre><code class="language-cpp">template&lt;class T&gt;
struct Data
{
    T *ptr;
    unsigned count;
};
template&lt;class T&gt;
struct DataN : public Data&lt;T&gt;
{
    DataN(T *t)
    {
        Data&lt;T&gt;::ptr = t;
        Data&lt;T&gt;::count = 1;
    }
    ~DataN() {delete Data&lt;T&gt;::ptr;}
};
</code></pre>
<p>Du musst also den Scope explizit angeben.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1710581</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1710581</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Thu, 14 May 2009 16:24:35 GMT</pubDate></item><item><title><![CDATA[Reply to seltsames template-problem on Thu, 14 May 2009 16:28:46 GMT]]></title><description><![CDATA[<p>hmm... stimmt - das hatte nur was mit vtables zu tun, was ich meinte ^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1710585</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1710585</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Thu, 14 May 2009 16:28:46 GMT</pubDate></item><item><title><![CDATA[Reply to seltsames template-problem on Thu, 14 May 2009 16:35:57 GMT]]></title><description><![CDATA[<p>Anmerk: Das public beim Ableiten kannst du dir sparen! :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1710589</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1710589</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Thu, 14 May 2009 16:35:57 GMT</pubDate></item><item><title><![CDATA[Reply to seltsames template-problem on Thu, 14 May 2009 16:41:00 GMT]]></title><description><![CDATA[<p>David_pb schrieb:</p>
<blockquote>
<p>Anmerk: Das public beim Ableiten kannst du dir sparen! :p</p>
</blockquote>
<p>Hatte es am Anfang nicht drin, bei meinem Beispiel, war mir dann aber doch nicht mehr sicher, ob dem so war. Hab es grad schnell noch im Standard nachgeschaut. Jap, structs sind nicht nur default public bei den Membern, sondern auch default public bei der Ableitung. Naja, aber lieber das ganze einheitlich halten. <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="😉"
    /><br />
Falls es wen interessiert, entscheidend dabei ist, von welchem &quot;Klassentyp&quot; (struct / class) die abgeleitete Klasse ist.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1710590</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1710590</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Thu, 14 May 2009 16:41:00 GMT</pubDate></item><item><title><![CDATA[Reply to seltsames template-problem on Thu, 14 May 2009 16:44:00 GMT]]></title><description><![CDATA[<p>hm, erstmal danke an euch, insbesondere an Dravere</p>
<p>komme halt von msvc her <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> wieder was gelernt<br />
das die basisklasse kein dtor hat ist schon richtig</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1710592</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1710592</guid><dc:creator><![CDATA[template&amp;lt;class user&amp;gt]]></dc:creator><pubDate>Thu, 14 May 2009 16:44:00 GMT</pubDate></item><item><title><![CDATA[Reply to seltsames template-problem on Thu, 14 May 2009 18:44:27 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>hmm... stimmt - das hatte nur was mit vtables zu tun, was ich meinte ^^</p>
</blockquote>
<p>Nein.<br />
Du hast schlicht und ergreifend die Basisklasse mit der Abgeleiteten verwechselt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1710639</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1710639</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 14 May 2009 18:44:27 GMT</pubDate></item><item><title><![CDATA[Reply to seltsames template-problem on Thu, 14 May 2009 19:05:18 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>unskilled schrieb:</p>
<blockquote>
<p>hmm... stimmt - das hatte nur was mit vtables zu tun, was ich meinte ^^</p>
</blockquote>
<p>Nein.<br />
Du hast schlicht und ergreifend die Basisklasse mit der Abgeleiteten verwechselt.</p>
</blockquote>
<p>oder das.... ^^<br />
naja - war bissl mehr, als nur das verwechselt - aus irgend nem grund hatte ich sofort an so was gedacht:</p>
<pre><code class="language-cpp">struct a
{
 virtual void foo() = 0;
 ~a() {foo();}
};

struct b : a
{
 void foo() {std::cout &lt;&lt; 2;}
};

int main()
{
 b bar;
}
</code></pre>
<p>naja - wären scho wieder beinahe 20 fehler drin gewesen... ich geh jz besser ma ins bett ^^</p>
<p>gn8 xD</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1710661</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1710661</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Thu, 14 May 2009 19:05:18 GMT</pubDate></item><item><title><![CDATA[Reply to seltsames template-problem on Thu, 14 May 2009 19:21:30 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>naja - wären scho wieder beinahe 20 fehler drin gewesen... ich geh jz besser ma ins bett ^^</p>
</blockquote>
<p>Make it so <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/1710679</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1710679</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 14 May 2009 19:21:30 GMT</pubDate></item></channel></rss>