<?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[Abgeleitete Template-Klassen und Konstruktoren]]></title><description><![CDATA[<p>Ich bin mir nicht sicher ob ich mir das Leben nicht viel zu schwer mache:</p>
<p>Ich habe 3 Klassen.</p>
<p>Klasse 1 ist eine übliche Klasse<br />
Klasse 2 ist eine Template-Klasse<br />
Klasse 3 ist eine abgeleitete Klasse aus Klasse 1 und Klasse 2.</p>
<p>Das sind meine 3 Header-Dateien</p>
<pre><code class="language-cpp">// --------
// class1.h

class Klasse1
{
  private:
    int iKlasse1;

  public:
    Klasse1(int i1);
};

// --------
// class2.h

template &lt;class T&gt;
class Klasse2
{
  private:
    T * pKlasse;

  public:
    Klasse2();
};

// --------
// class3.h

#include &quot;class1.h&quot;
#include &quot;class2.h&quot;

class Klasse3 : public Klasse 1, public Klasse2&lt;Klasse3&gt;
{
  private:
    int iKlasse3;

  public:
    Klasse3(int i1, int i3);
};
</code></pre>
<p>Und das sind meine dazugehörigen Source-Dateien</p>
<pre><code class="language-cpp">// ----------
// class1.cpp

#include &quot;class1.h&quot;

Klasse1::Klasse1(in i1)
{
  iKlasse1 = i1;
}

// ----------
// class2.cpp

#include &quot;class2.h&quot;

template &lt;class T&gt;
Klasse2&lt;T&gt;::Klasse2()
{
  pKlasse = NULL;
}

// ----------
// class3.cpp

#include &quot;class3.h&quot;

// ACHTUNG hier ist mein Problem:
Klasse3::Klasse3(int i1, int i3) : Klasse1(i1), Klasse2()
{
  iKlasse3 = i3;
}
</code></pre>
<p>Mein Problem: Wie kann ich den Konstruktor der Klasse 2 aufrufen?<br />
Das ist ja meine Template-Klasse also vermute ich mal irgendwie sowas:</p>
<p>Klasse3::Klasse3(...) : Klasse1(...), <strong>Klasse2&lt;Klasse3&gt;()</strong></p>
<p>oder wenigstens so ähnlich...</p>
<p>Aber wie ich es auch mache, ist es falsch.<br />
Hab schon alles mögliche gegoogelt aber sowas ähnliches hab ich da noch nicht gefunden...</p>
<p>Hat jemand eine Lösung?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/231038/abgeleitete-template-klassen-und-konstruktoren</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 22:43:33 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/231038.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 05 Jan 2009 19:15:24 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Abgeleitete Template-Klassen und Konstruktoren on Mon, 05 Jan 2009 19:15:24 GMT]]></title><description><![CDATA[<p>Ich bin mir nicht sicher ob ich mir das Leben nicht viel zu schwer mache:</p>
<p>Ich habe 3 Klassen.</p>
<p>Klasse 1 ist eine übliche Klasse<br />
Klasse 2 ist eine Template-Klasse<br />
Klasse 3 ist eine abgeleitete Klasse aus Klasse 1 und Klasse 2.</p>
<p>Das sind meine 3 Header-Dateien</p>
<pre><code class="language-cpp">// --------
// class1.h

class Klasse1
{
  private:
    int iKlasse1;

  public:
    Klasse1(int i1);
};

// --------
// class2.h

template &lt;class T&gt;
class Klasse2
{
  private:
    T * pKlasse;

  public:
    Klasse2();
};

// --------
// class3.h

#include &quot;class1.h&quot;
#include &quot;class2.h&quot;

class Klasse3 : public Klasse 1, public Klasse2&lt;Klasse3&gt;
{
  private:
    int iKlasse3;

  public:
    Klasse3(int i1, int i3);
};
</code></pre>
<p>Und das sind meine dazugehörigen Source-Dateien</p>
<pre><code class="language-cpp">// ----------
// class1.cpp

#include &quot;class1.h&quot;

Klasse1::Klasse1(in i1)
{
  iKlasse1 = i1;
}

// ----------
// class2.cpp

#include &quot;class2.h&quot;

template &lt;class T&gt;
Klasse2&lt;T&gt;::Klasse2()
{
  pKlasse = NULL;
}

// ----------
// class3.cpp

#include &quot;class3.h&quot;

// ACHTUNG hier ist mein Problem:
Klasse3::Klasse3(int i1, int i3) : Klasse1(i1), Klasse2()
{
  iKlasse3 = i3;
}
</code></pre>
<p>Mein Problem: Wie kann ich den Konstruktor der Klasse 2 aufrufen?<br />
Das ist ja meine Template-Klasse also vermute ich mal irgendwie sowas:</p>
<p>Klasse3::Klasse3(...) : Klasse1(...), <strong>Klasse2&lt;Klasse3&gt;()</strong></p>
<p>oder wenigstens so ähnlich...</p>
<p>Aber wie ich es auch mache, ist es falsch.<br />
Hab schon alles mögliche gegoogelt aber sowas ähnliches hab ich da noch nicht gefunden...</p>
<p>Hat jemand eine Lösung?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1640061</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1640061</guid><dc:creator><![CDATA[Kopfschmerzen]]></dc:creator><pubDate>Mon, 05 Jan 2009 19:15:24 GMT</pubDate></item><item><title><![CDATA[Reply to Abgeleitete Template-Klassen und Konstruktoren on Mon, 05 Jan 2009 19:19:53 GMT]]></title><description><![CDATA[<p>Weil Klasse2 einen Standardkonstruktor hat, musst du garnichts machen. Ansonsten: Klasse2&lt;Klasse3&gt;().</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1640064</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1640064</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Mon, 05 Jan 2009 19:19:53 GMT</pubDate></item><item><title><![CDATA[Reply to Abgeleitete Template-Klassen und Konstruktoren on Mon, 05 Jan 2009 22:48:30 GMT]]></title><description><![CDATA[<p>Meinst du mit gernichts machen dass ich den Konstruktoraufruf einfach weglassen soll?</p>
<p>ungefähr so?</p>
<pre><code class="language-cpp">Klasse3::Klasse3(int i1, int i3) : Klasse1(i1)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1640168</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1640168</guid><dc:creator><![CDATA[Kopfschmerzen]]></dc:creator><pubDate>Mon, 05 Jan 2009 22:48:30 GMT</pubDate></item><item><title><![CDATA[Reply to Abgeleitete Template-Klassen und Konstruktoren on Mon, 05 Jan 2009 22:59:13 GMT]]></title><description><![CDATA[<p>Genau!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1640169</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1640169</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Mon, 05 Jan 2009 22:59:13 GMT</pubDate></item><item><title><![CDATA[Reply to Abgeleitete Template-Klassen und Konstruktoren on Tue, 06 Jan 2009 11:42:31 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">// ----------
// class2.cpp

#include &quot;class2.h&quot;

template &lt;class T&gt;
Klasse2&lt;T&gt;::Klasse2()
{
  pKlasse = NULL;
}
</code></pre>
<p>Das wird nicht so funktionieren wie du dir das vorstellst.<br />
Ich wette du bekommst dann linker error <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>Daher solltest du diesen C'tor in deinem Header implementieren.</p>
<p>BR<br />
Vinzenz</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1640330</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1640330</guid><dc:creator><![CDATA[evilissimo]]></dc:creator><pubDate>Tue, 06 Jan 2009 11:42:31 GMT</pubDate></item><item><title><![CDATA[Reply to Abgeleitete Template-Klassen und Konstruktoren on Tue, 06 Jan 2009 12:44:08 GMT]]></title><description><![CDATA[<p>evilissimo schrieb:</p>
<blockquote>
<p>Daher solltest du diesen C'tor in deinem Header implementieren.</p>
</blockquote>
<p>wie meinst du das? was soll in den header?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1640362</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1640362</guid><dc:creator><![CDATA[Kopfschmerzen]]></dc:creator><pubDate>Tue, 06 Jan 2009 12:44:08 GMT</pubDate></item><item><title><![CDATA[Reply to Abgeleitete Template-Klassen und Konstruktoren on Tue, 06 Jan 2009 13:13:16 GMT]]></title><description><![CDATA[<p>Die definitionen deiner Template-Klassenmethoden soll mit in den Header. Siehe auch hier (FAQ)<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-39467.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-39467.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1640376</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1640376</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 06 Jan 2009 13:13:16 GMT</pubDate></item><item><title><![CDATA[Reply to Abgeleitete Template-Klassen und Konstruktoren on Tue, 06 Jan 2009 15:43:05 GMT]]></title><description><![CDATA[<p>Hey Super <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 />
Kaum in den Header verschoben schon gehts völlig reibungslos...</p>
<p>find das aber recht unschön <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="😞"
    /> Sowas gehört doch eigentlich in eine cpp rein oda?<br />
naja egal <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="😃"
    /> es geht!</p>
<p>danke euch</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1640469</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1640469</guid><dc:creator><![CDATA[Kopfschmerzen]]></dc:creator><pubDate>Tue, 06 Jan 2009 15:43:05 GMT</pubDate></item><item><title><![CDATA[Reply to Abgeleitete Template-Klassen und Konstruktoren on Tue, 06 Jan 2009 18:10:15 GMT]]></title><description><![CDATA[<p>Kopfschmerzen schrieb:</p>
<blockquote>
<p>find das aber recht unschön <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="😞"
    /> Sowas gehört doch eigentlich in eine cpp rein oda?</p>
</blockquote>
<p>Bei &quot;normalen&quot; Funktionen schon. Templates haben aber einen Sonderstatus, was die Linkage betrifft. Dazu steht auch etwas in den FAQ.</p>
<p>Um die Unschönheit abzuschwächen und die Trennung Schnittstelle - Implementierung aufrechtzuerhalten, kann man immer noch einen Header mit den Definitionen der Funktionstemplates anlegen, beispielsweise mit Endung .impl, .ipp, .inl oder einfach .h respektive .hpp.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1640574</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1640574</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 06 Jan 2009 18:10:15 GMT</pubDate></item><item><title><![CDATA[Reply to Abgeleitete Template-Klassen und Konstruktoren on Wed, 07 Jan 2009 07:50:16 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Kopfschmerzen schrieb:</p>
<blockquote>
<p>find das aber recht unschön <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="😞"
    /> Sowas gehört doch eigentlich in eine cpp rein oda?</p>
</blockquote>
<p>Bei &quot;normalen&quot; Funktionen schon. Templates haben aber einen Sonderstatus, ...</p>
</blockquote>
<p>Oder wie ich es mir immer merke: &quot;Template&quot; = &quot;Schablone (aus der der Compiler erst eine Funktion bastelt)&quot;.<br />
Damit ist's irgendwie klar, dass man diese Schablone dem Compiler auch an die Hand geben muss... Der Linker braucht die Information, dass die Funktion aus einem Template stammt eigentlich nur noch, um sich über &quot;Doppeldefinitionen&quot; nicht mehr so aufzuregen... <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>Gruß,</p>
<p>Simon2.</p>
<p>P.S.: Gibt es eigentlich Compiler/Linker, die bei den &quot;Doppeldefinitionen&quot; von Templateinstanzen die Konsistenz der Implementierung gewährleisten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1640898</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1640898</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 07 Jan 2009 07:50:16 GMT</pubDate></item><item><title><![CDATA[Reply to Abgeleitete Template-Klassen und Konstruktoren on Wed, 07 Jan 2009 23:02:39 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>P.S.: Gibt es eigentlich Compiler/Linker, die bei den &quot;Doppeldefinitionen&quot; von Templateinstanzen die Konsistenz der Implementierung gewährleisten?</p>
</blockquote>
<p>Templateklassen sind meistens mehrmals definiert und müssen daher immer gleich sein. Die ODR ist auch hier gültig. (Allerdings als ein Sonderfall 3.2/5).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1641446</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1641446</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Wed, 07 Jan 2009 23:02:39 GMT</pubDate></item></channel></rss>