<?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[Templates in verketteten Listen. Dritter und letzer Versuch..es muss doch irgendwie gehen!]]></title><description><![CDATA[<p>Hallo,</p>
<p>leider hänge ich immernoch bei dem Problem mit den Templates in verketteten<br />
Listen fest. Deswegen noch ein letzter Versuch zu fragen ob nicht jemand eine<br />
Lösung oder Idee zu diesem Problem hat.</p>
<p>Ich habe eine objekt-orientierte verkettete Liste geschrieben. Der Kopf-, End-<br />
und Datenknoten erben von der abstrakten Klasse Node.</p>
<p>Da ich eine Vielzahl von unterschiedlichen Objekten in Listen speichern möchte,<br />
möchte ich die verk. Liste mit Template-Objekten arbeiten lassen.<br />
Das geht auch, bis zu diesem Punkt:</p>
<pre><code class="language-cpp">class Node
{
public:
  ..
  template &lt;class T&gt;
  Node * add(DataNode&lt;T&gt; *t){}
  ..
}
</code></pre>
<p>Da die Funktion eine Template-Funktion ist, kann ich diese nicht als virtuell<br />
deklarieren. Implementieren geht nicht, weil die Klasse abstrakt ist.<br />
Implementiere ich sie leer, wie im obrigen Beispiel, wird immer add von Node<br />
aufgerufen und es passiert (logischerweise) nichts. Und spezifiziere ich diese<br />
Methode (add(DataNode&lt;Typ1&gt; *t)) muss ich diese in abgeleiteten Klassen für alle<br />
Typen überschreiben und führe damit Templates ad absurdum.</p>
<p>Das Problem nochmal vereinfacht: Es wird immer ein Node-Zeiger zurückgeliefert,<br />
es soll aber die entsprechende add-Methode des Objekt ausgeführt werden.</p>
<p>Gibt es irgenteine Möglichkeit eine verkettete Liste mit Templates so oder<br />
ähnlich zu realisieren?</p>
<p>Hat die STL vielleicht etwas zu bieten, womit sowas ginge?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/119671/templates-in-verketteten-listen-dritter-und-letzer-versuch-es-muss-doch-irgendwie-gehen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 22 Aug 2026 03:21:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/119671.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 04 Sep 2005 13:09:16 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Templates in verketteten Listen. Dritter und letzer Versuch..es muss doch irgendwie gehen! on Sun, 04 Sep 2005 13:09:16 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>leider hänge ich immernoch bei dem Problem mit den Templates in verketteten<br />
Listen fest. Deswegen noch ein letzter Versuch zu fragen ob nicht jemand eine<br />
Lösung oder Idee zu diesem Problem hat.</p>
<p>Ich habe eine objekt-orientierte verkettete Liste geschrieben. Der Kopf-, End-<br />
und Datenknoten erben von der abstrakten Klasse Node.</p>
<p>Da ich eine Vielzahl von unterschiedlichen Objekten in Listen speichern möchte,<br />
möchte ich die verk. Liste mit Template-Objekten arbeiten lassen.<br />
Das geht auch, bis zu diesem Punkt:</p>
<pre><code class="language-cpp">class Node
{
public:
  ..
  template &lt;class T&gt;
  Node * add(DataNode&lt;T&gt; *t){}
  ..
}
</code></pre>
<p>Da die Funktion eine Template-Funktion ist, kann ich diese nicht als virtuell<br />
deklarieren. Implementieren geht nicht, weil die Klasse abstrakt ist.<br />
Implementiere ich sie leer, wie im obrigen Beispiel, wird immer add von Node<br />
aufgerufen und es passiert (logischerweise) nichts. Und spezifiziere ich diese<br />
Methode (add(DataNode&lt;Typ1&gt; *t)) muss ich diese in abgeleiteten Klassen für alle<br />
Typen überschreiben und führe damit Templates ad absurdum.</p>
<p>Das Problem nochmal vereinfacht: Es wird immer ein Node-Zeiger zurückgeliefert,<br />
es soll aber die entsprechende add-Methode des Objekt ausgeführt werden.</p>
<p>Gibt es irgenteine Möglichkeit eine verkettete Liste mit Templates so oder<br />
ähnlich zu realisieren?</p>
<p>Hat die STL vielleicht etwas zu bieten, womit sowas ginge?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/864598</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/864598</guid><dc:creator><![CDATA[lgn]]></dc:creator><pubDate>Sun, 04 Sep 2005 13:09:16 GMT</pubDate></item><item><title><![CDATA[Reply to Templates in verketteten Listen. Dritter und letzer Versuch..es muss doch irgendwie gehen! on Sun, 04 Sep 2005 13:16:38 GMT]]></title><description><![CDATA[<p>lgn schrieb:</p>
<blockquote>
<p>Da ich eine Vielzahl von unterschiedlichen Objekten in Listen speichern möchte,<br />
möchte ich die verk. Liste mit Template-Objekten arbeiten lassen.</p>
</blockquote>
<p>Bloss zum Verständniss, willst du eine inhomogene Liste, also eine die mehrere Objekte unterschiedlichen Typs enthält, oder eine homogene, also eine die nur Objekte des selben Typs enthält? Vllt. kann man dir ja dann helfen <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/864601</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/864601</guid><dc:creator><![CDATA[GPC]]></dc:creator><pubDate>Sun, 04 Sep 2005 13:16:38 GMT</pubDate></item><item><title><![CDATA[Reply to Templates in verketteten Listen. Dritter und letzer Versuch..es muss doch irgendwie gehen! on Sun, 04 Sep 2005 13:20:38 GMT]]></title><description><![CDATA[<p>Danke, das ging wirklich schnell <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>Also die Listen sollen homogen sein. Also eine Liste mit Typ1 und eine andere mit<br />
einem anderen Typen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/864606</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/864606</guid><dc:creator><![CDATA[lgn]]></dc:creator><pubDate>Sun, 04 Sep 2005 13:20:38 GMT</pubDate></item><item><title><![CDATA[Reply to Templates in verketteten Listen. Dritter und letzer Versuch..es muss doch irgendwie gehen! on Sun, 04 Sep 2005 13:22:02 GMT]]></title><description><![CDATA[<p>Ich glaube dein ansatz ist falsch. Alle nodes sind gleich. Nix kopf- und fußnode. Also eher:</p>
<pre><code class="language-cpp">template&lt;class T&gt;
class list
{
private:
    struct node
    {
        T data;
        node* next,prev;
    };
    node* head;
public:
    //...
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/864607</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/864607</guid><dc:creator><![CDATA[ness]]></dc:creator><pubDate>Sun, 04 Sep 2005 13:22:02 GMT</pubDate></item><item><title><![CDATA[Reply to Templates in verketteten Listen. Dritter und letzer Versuch..es muss doch irgendwie gehen! on Sun, 04 Sep 2005 15:40:28 GMT]]></title><description><![CDATA[<p>Vielen Dank. Ich werde das so probieren.</p>
<p>Ich hab allerdings ein Verständnisproblem bei dem Beispiel.<br />
Wie erzeuge ich überhaupt neue Knoten? (es werden ja struct-Variablen und nicht<br />
deren Klassen-Objekte miteinander verknüpft)</p>
<p>Anmerkung:</p>
<p>so wie ich das sehe brauche ich auch zwei add-Methoden, eine void und eine, die<br />
einen Zeiger auf eine Node-Struktur zurückliefert.</p>
<p>Mit der void-methode wird dann hinzugefügt (Liste-&gt;add(Typ1 *t)), die andere ist<br />
intern, bekommt einen Zeiger übergeben und liefert einen Zeiger für Node next<br />
zurück (um die Objekte zu delegieren und an der richtigen Stelle anzufügen).</p>
<p>Ist das so in etwa richtig?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/864676</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/864676</guid><dc:creator><![CDATA[lgn]]></dc:creator><pubDate>Sun, 04 Sep 2005 15:40:28 GMT</pubDate></item><item><title><![CDATA[Reply to Templates in verketteten Listen. Dritter und letzer Versuch..es muss doch irgendwie gehen! on Sun, 04 Sep 2005 15:42:21 GMT]]></title><description><![CDATA[<p>ich gb dir jetzt nur einige beispielzeilen code von denen du sehr schnell schließen kannst wie die liste funktioniert:</p>
<pre><code class="language-cpp">node* newNode=new node;
head-&gt;next=newNode;
newNode-&gt;prev=head;
</code></pre>
<p>und das ergebnis davon ist folgende liste(pfeile geben richtungen an in denen man sich bewegen kann):</p>
<pre><code>head----&gt;newNode
    &lt;----
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/864680</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/864680</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Sun, 04 Sep 2005 15:42:21 GMT</pubDate></item><item><title><![CDATA[Reply to Templates in verketteten Listen. Dritter und letzer Versuch..es muss doch irgendwie gehen! on Sun, 04 Sep 2005 15:57:56 GMT]]></title><description><![CDATA[<p>Ich glaube mal, er weiß, wie eine liste funktioniert. Die idee ist, den Kram zu kapseln:</p>
<pre><code class="language-cpp">template&lt;class T&gt;
class list
{
private:
    struct node
    {
        T data;
        node* next,prev;
        node(const T&amp; d,node* n,node* p)
            :data(d),next(n),prev(p)
        {
        };
    };
    node* head;
public:
    typedef node* iterator;    

    iterator push_back(const T&amp; t)
    {
        node* l=head;
        while(l-&gt;next)
            l=l-&gt;next;
        l-&gt;next=new node(t,0,l);
        return l-&gt;next;
    };

    iterator push_front(const T&amp; t)
    {
        head-&gt;prev=new node(t,head,0);
        head=head-&gt;prev;
        return head;
    };

    iterator insert(const T&amp; t,iterator i)
    {
        i-&gt;next=new node(t,i-&gt;next,i);
        return i-&gt;next;
    };
    //...
};
</code></pre>
<p>Keine Ahnung ob das hetzt alles perfekt ist, ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/864689</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/864689</guid><dc:creator><![CDATA[ness]]></dc:creator><pubDate>Sun, 04 Sep 2005 15:57:56 GMT</pubDate></item><item><title><![CDATA[Reply to Templates in verketteten Listen. Dritter und letzer Versuch..es muss doch irgendwie gehen! on Mon, 05 Sep 2005 05:24:12 GMT]]></title><description><![CDATA[<p>ness schrieb:</p>
<blockquote>
<p>Ich glaube mal, er weiß, wie eine liste funktioniert. Die idee ist, den Kram zu kapseln:</p>
<pre><code class="language-cpp">template&lt;class T&gt;
class list
{
private:
    struct node
    {
        T data;
        node* next,prev;
        node(const T&amp; d,node* n,node* p)
            :data(d),next(n),prev(p)
        {
        };
    };
    node* head;
public:
    typedef node* iterator;    

    iterator push_back(const T&amp; t)
    {
        node* l=head;
        while(l-&gt;next)
            l=l-&gt;next;
        l-&gt;next=new node(t,0,l);
        return l-&gt;next;
    };

    iterator push_front(const T&amp; t)
    {
        head-&gt;prev=new node(t,head,0);
        head=head-&gt;prev;
        return head;
    };
    
    iterator insert(const T&amp; t,iterator i)
    {
        i-&gt;next=new node(t,i-&gt;next,i);
        return i-&gt;next;
    };
    //...
};
</code></pre>
<p>Keine Ahnung ob das hetzt alles perfekt ist, ...</p>
</blockquote>
<p>Du verwendest bei nem struct nen Konstruktor??<br />
structs führen keine Methoden mit sich ( jedenfalls meines Wissens nach)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/865046</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/865046</guid><dc:creator><![CDATA[Vorden]]></dc:creator><pubDate>Mon, 05 Sep 2005 05:24:12 GMT</pubDate></item><item><title><![CDATA[Reply to Templates in verketteten Listen. Dritter und letzer Versuch..es muss doch irgendwie gehen! on Mon, 05 Sep 2005 07:05:21 GMT]]></title><description><![CDATA[<p>Hallo</p>
<blockquote>
<p>Du verwendest bei nem struct nen Konstruktor??<br />
structs führen keine Methoden mit sich ( jedenfalls meines Wissens nach)</p>
</blockquote>
<p>Doch. In C++ ist der einzigste Unterschied zwischen struct und class, das die Member von class per Default private sind, bei struct public.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/865102</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/865102</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Mon, 05 Sep 2005 07:05:21 GMT</pubDate></item><item><title><![CDATA[Reply to Templates in verketteten Listen. Dritter und letzer Versuch..es muss doch irgendwie gehen! on Mon, 05 Sep 2005 08:18:37 GMT]]></title><description><![CDATA[<p>Ich dachte immer, dass structs keine Methoden enthalten können...<br />
Bei structs is doch dann eh immer alles public, wenn ich mich recht entsinne</p>
]]></description><link>https://www.c-plusplus.net/forum/post/865157</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/865157</guid><dc:creator><![CDATA[Vorden]]></dc:creator><pubDate>Mon, 05 Sep 2005 08:18:37 GMT</pubDate></item><item><title><![CDATA[Reply to Templates in verketteten Listen. Dritter und letzer Versuch..es muss doch irgendwie gehen! on Mon, 05 Sep 2005 08:51:24 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>also noch einmal : in C++ kannst du mit structs alles machen, was du auch mit clas machen kannst, auch private verwenden. Nur die Standardsichtbarkeit der Meber ist unterschiedlich.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/865186</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/865186</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Mon, 05 Sep 2005 08:51:24 GMT</pubDate></item><item><title><![CDATA[Reply to Templates in verketteten Listen. Dritter und letzer Versuch..es muss doch irgendwie gehen! on Mon, 05 Sep 2005 13:13:43 GMT]]></title><description><![CDATA[<p>Ich denke mal volkard wollte eher darauf hinaus, dass structs keine methoden enthalten sollten, da sie (ehemals) nur zur datenhaltung gedacht waren. Ich finde aber halt</p>
<pre><code class="language-cpp">f = new foo(a,b);
</code></pre>
<p>schöner als</p>
<pre><code class="language-cpp">f = new foo;
f.a = a;
f.b = b;
</code></pre>
<p>keine ahnung ob sowas wie f = new foo({a,b}) geht (impliziter copy-ctor?).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/865416</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/865416</guid><dc:creator><![CDATA[ness]]></dc:creator><pubDate>Mon, 05 Sep 2005 13:13:43 GMT</pubDate></item><item><title><![CDATA[Reply to Templates in verketteten Listen. Dritter und letzer Versuch..es muss doch irgendwie gehen! on Mon, 05 Sep 2005 13:33:08 GMT]]></title><description><![CDATA[<p>ness schrieb:</p>
<blockquote>
<p>Ich denke mal volkard</p>
</blockquote>
<p>volkard? Sicher? ;).</p>
<p>Btw:</p>
<pre><code class="language-cpp">iterator insert(const T&amp; t,iterator i)
    {
        i-&gt;next=new node(t,i-&gt;next,i);
        return i-&gt;next;
    };
    //...
};
</code></pre>
<p>Hier bekommt new node-&gt;next einen Zeiger auf sich selbst... (Außerdem bekommt das dynamische Objekt hinter new node keinen Zeiger auf new node als previous...)</p>
<p>Außerdem:</p>
<pre><code class="language-cpp">...
    struct node
    {
        T data;
        node* next,prev;
        node(const T&amp; d,node* n,node* p)
            :data(d),next(n),prev(p)
        {
        };
    };
...
</code></pre>
<p>legst du in dieser Struktur nur einen Pointer next an. prev ist ein normales Objekt vom Typ node ;).</p>
<p>Caipi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/865432</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/865432</guid><dc:creator><![CDATA[Caipi]]></dc:creator><pubDate>Mon, 05 Sep 2005 13:33:08 GMT</pubDate></item><item><title><![CDATA[Reply to Templates in verketteten Listen. Dritter und letzer Versuch..es muss doch irgendwie gehen! on Mon, 05 Sep 2005 23:11:27 GMT]]></title><description><![CDATA[<p>Vielen Dank für die ausführlichen Beispiele.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/865823</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/865823</guid><dc:creator><![CDATA[lgn]]></dc:creator><pubDate>Mon, 05 Sep 2005 23:11:27 GMT</pubDate></item></channel></rss>