<?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[Definition eines statischen template-struct-members]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein &quot;template-struct&quot; welches einen statischen Member besitzt, allerdings habe ich ein Problem bei der Definition Selbiges.</p>
<pre><code>..\linkedlist\main.cpp(20) : error C2955: 'linkedlist::node' : use of class template requires template argument list
        ..\linkedlist\main.cpp(7) : see declaration of 'linkedlist::node'
</code></pre>
<pre><code class="language-cpp">#include &lt;iostream&gt;

namespace linkedlist
{
template &lt;typename T&gt;
struct node
{
    T val;
    node *next;
    static node *prev;

    node(): val(0), next(0) {}
    node(T v): val(v), next(0) {
        if (prev != 0)
            prev-&gt;next = this;
        prev = this;
    }
};
template &lt;typename T&gt;
node *node&lt;T&gt;::prev = 0;
}

int main()
{
    using namespace linkedlist;
    node x('S');
    node y('R');
    node z('1');
    for (;; x = *x.next) {
        std::cout &lt;&lt; x.val;
        if (!x.next) break;
    }
    return 0;
}
</code></pre>
<p>Vielen Dank schonmal im Voraus!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/297615/definition-eines-statischen-template-struct-members</link><generator>RSS for Node</generator><lastBuildDate>Fri, 14 Aug 2026 09:12:04 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/297615.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 03 Jan 2012 11:14:22 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Definition eines statischen template-struct-members on Tue, 03 Jan 2012 11:14:22 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein &quot;template-struct&quot; welches einen statischen Member besitzt, allerdings habe ich ein Problem bei der Definition Selbiges.</p>
<pre><code>..\linkedlist\main.cpp(20) : error C2955: 'linkedlist::node' : use of class template requires template argument list
        ..\linkedlist\main.cpp(7) : see declaration of 'linkedlist::node'
</code></pre>
<pre><code class="language-cpp">#include &lt;iostream&gt;

namespace linkedlist
{
template &lt;typename T&gt;
struct node
{
    T val;
    node *next;
    static node *prev;

    node(): val(0), next(0) {}
    node(T v): val(v), next(0) {
        if (prev != 0)
            prev-&gt;next = this;
        prev = this;
    }
};
template &lt;typename T&gt;
node *node&lt;T&gt;::prev = 0;
}

int main()
{
    using namespace linkedlist;
    node x('S');
    node y('R');
    node z('1');
    for (;; x = *x.next) {
        std::cout &lt;&lt; x.val;
        if (!x.next) break;
    }
    return 0;
}
</code></pre>
<p>Vielen Dank schonmal im Voraus!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2163187</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2163187</guid><dc:creator><![CDATA[mortified_penguin]]></dc:creator><pubDate>Tue, 03 Jan 2012 11:14:22 GMT</pubDate></item><item><title><![CDATA[Reply to Definition eines statischen template-struct-members on Tue, 03 Jan 2012 11:18:06 GMT]]></title><description><![CDATA[<p>Du hast in der Definition als Typ &quot;node *&quot;. &quot;node&quot; ist aber kein Typ, sondern ein Template. Der Typ wäre &quot;node&lt;T&gt; *&quot;.</p>
<p>Davon abgesehen, warum sollte der Vorgänger eines Knotens einer verketteten Liste statisch sein?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2163188</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2163188</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 03 Jan 2012 11:18:06 GMT</pubDate></item><item><title><![CDATA[Reply to Definition eines statischen template-struct-members on Tue, 03 Jan 2012 11:23:36 GMT]]></title><description><![CDATA[<p>Maht Sinn, ich habe die Zeile in</p>
<pre><code class="language-cpp">node&lt;T&gt; *node::prev = 0;
</code></pre>
<p>umgeändert, bekomme aber immernoch den selben Fehler...</p>
<p>Die Liste ist nur einfach verkettet, deshalb muss ich nur auf den Vorgänger zugreifen, um dessen next-Member verändern zu können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2163191</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2163191</guid><dc:creator><![CDATA[mortified_penguin]]></dc:creator><pubDate>Tue, 03 Jan 2012 11:23:36 GMT</pubDate></item><item><title><![CDATA[Reply to Definition eines statischen template-struct-members on Tue, 03 Jan 2012 11:28:10 GMT]]></title><description><![CDATA[<p>ja aber nicht statisch !! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>statisch heist: egal wie viele objekte vom typ node du hast, egal wie die aussehen, es gibt nur eine variable prev die auf das gleiche zeigt, in dem fall für alle nodes die erzeugt sind. das heist also, alle hätten den gleichen vorgänger...</p>
<p>und da das nicht das ist was du willst, entfernst du das static und hast auch kein problem mehr mit der definition desselben...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2163194</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2163194</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Tue, 03 Jan 2012 11:28:10 GMT</pubDate></item><item><title><![CDATA[Reply to Definition eines statischen template-struct-members on Tue, 03 Jan 2012 11:33:23 GMT]]></title><description><![CDATA[<p>Hmmm ich glaube du hast mich falsch verstanden. Die Liste ist nur einfach verkettet. Ich will die Liste nicht von hinten nach vorne durchwandern können. Ich brauche die Adresse des Vorgängers nur, um dessen next-Member auf den neuen Node zeigen zu lassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2163197</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2163197</guid><dc:creator><![CDATA[mortified_penguin]]></dc:creator><pubDate>Tue, 03 Jan 2012 11:33:23 GMT</pubDate></item><item><title><![CDATA[Reply to Definition eines statischen template-struct-members on Tue, 03 Jan 2012 11:38:09 GMT]]></title><description><![CDATA[<p>mortified_penguin schrieb:</p>
<blockquote>
<p>Hmmm ich glaube du hast mich falsch verstanden. Die Liste ist nur einfach verkettet. Ich will die Liste nicht von hinten nach vorne durchwandern können. Ich brauche die Adresse des Vorgängers nur, um dessen next-Member auf den neuen Node zeigen zu lassen.</p>
</blockquote>
<p>Ich glaube Du hast &quot;statisch&quot; falsch verstanden: Es gibt nur <em><strong>ein</strong></em> &quot;prev&quot; im gesamten Programm. Das heißt jedes Element Deiner Liste hätte denselben Vorgänger. Und irgendein Element Deiner Liste wäre der Vorgänger von allen anderen Elementen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2163202</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2163202</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 03 Jan 2012 11:38:09 GMT</pubDate></item><item><title><![CDATA[Reply to Definition eines statischen template-struct-members on Tue, 03 Jan 2012 11:42:34 GMT]]></title><description><![CDATA[<p>mh, mit einer einfach verketteten liste kann man eh nur halbwegs effizient einen stack implementieren, also eine liste wo man nur zugriff auf das oberste element hat (einfügen, löschen, wert angucken). da finde ich die namen &quot;next&quot; was doof gewählt, da man ja eigentlich immer nur auf den vorgänger &quot;runter&quot; schaut</p>
<p>und wenn du 2 zeiger für prev und next haben willst, hast du eh eine doppelt verkettete liste. aber statisch hat in jedem fall nix da zu suchen.</p>
<p>wie jaxom schon sagte, guck dir nochmal die semantik von static an...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2163207</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2163207</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Tue, 03 Jan 2012 11:42:34 GMT</pubDate></item><item><title><![CDATA[Reply to Definition eines statischen template-struct-members on Tue, 03 Jan 2012 11:47:59 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>Ich glaube Du hast &quot;statisch&quot; falsch verstanden: Es gibt nur <em><strong>ein</strong></em> &quot;prev&quot; im gesamten Programm.</p>
</blockquote>
<p>Das ist mir schon klar.</p>
<p>LordJaxom schrieb:</p>
<blockquote>
<p>Das heißt jedes Element Deiner Liste hätte denselben Vorgänger. Und irgendein Element Deiner Liste wäre der Vorgänger von allen anderen Elementen.</p>
</blockquote>
<p>Wie gesagt, ich brauche prev nur, um die Adresse des Vorgängers zu speichern, damit ich nochmal beim Erzeugen des nächsten Nodes drauf zugreifen kann. Dass der beim nächsten Node wieder überschrieben wird, ist von mir gewünscht.<br />
Genausogut hätte ich können eine globale Variable nehmen oder den Vorgängernode dem Konstruktor übergeben können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2163209</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2163209</guid><dc:creator><![CDATA[mortified_penguin]]></dc:creator><pubDate>Tue, 03 Jan 2012 11:47:59 GMT</pubDate></item><item><title><![CDATA[Reply to Definition eines statischen template-struct-members on Tue, 03 Jan 2012 11:51:16 GMT]]></title><description><![CDATA[<p>Ok, verstanden. Wenn auch sehr sehr unüblich. Aber Dir ist auch bewusst, dass Du Dir damit die Möglichkeit verbaust, mehr als eine Liste zu verwalten?</p>
<p>Zum Problem:<br />
&quot;node&quot; kommt in der Definition zweimal vor. Beide Vorkommen sind Templates. Also müssen bei beiden Vorkommen Templateargumente angegeben werden, um einen Typen zu erhalten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2163210</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2163210</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 03 Jan 2012 11:51:16 GMT</pubDate></item><item><title><![CDATA[Reply to Definition eines statischen template-struct-members on Tue, 03 Jan 2012 12:01:46 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>Ok, verstanden. Wenn auch sehr sehr unüblich. Aber Dir ist auch bewusst, dass Du Dir damit die Möglichkeit verbaust, mehr als eine Liste zu verwalten?</p>
</blockquote>
<p>Im Prinzip gings mir nur darum, ein bisschen &quot;static zu üben&quot; :D.</p>
<p>LordJaxom schrieb:</p>
<blockquote>
<p>Zum Problem:<br />
&quot;node&quot; kommt in der Definition zweimal vor. Beide Vorkommen sind Templates. Also müssen bei beiden Vorkommen Templateargumente angegeben werden, um einen Typen zu erhalten.</p>
</blockquote>
<p>Also so?:</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
node&lt;T&gt; *node&lt;T&gt;::prev = 0;
</code></pre>
<p>Leider kommt da wieder der selbe Fehler <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="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2163214</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2163214</guid><dc:creator><![CDATA[mortified_penguin]]></dc:creator><pubDate>Tue, 03 Jan 2012 12:01:46 GMT</pubDate></item><item><title><![CDATA[Reply to Definition eines statischen template-struct-members on Tue, 03 Jan 2012 21:59:50 GMT]]></title><description><![CDATA[<p>Es gibt noch mehr Vorkommen von node ohne Templateargumentliste in deinem Code. Schau dir mal Zeile 9 und 10 an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2163458</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2163458</guid><dc:creator><![CDATA[wxSkip]]></dc:creator><pubDate>Tue, 03 Jan 2012 21:59:50 GMT</pubDate></item><item><title><![CDATA[Reply to Definition eines statischen template-struct-members on Tue, 03 Jan 2012 22:21:10 GMT]]></title><description><![CDATA[<p>wxSkip schrieb:</p>
<blockquote>
<p>Es gibt noch mehr Vorkommen von node ohne Templateargumentliste in deinem Code. Schau dir mal Zeile 9 und 10 an.</p>
</blockquote>
<p>Das ist dort aber kein Fehler.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2163464</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2163464</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 03 Jan 2012 22:21:10 GMT</pubDate></item><item><title><![CDATA[Reply to Definition eines statischen template-struct-members on Wed, 04 Jan 2012 08:28:10 GMT]]></title><description><![CDATA[<p>So müsste es doch eigentlich stimmen oder?</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;

namespace linkedlist
{
template &lt;typename T&gt;
struct node
{
    T val;
    node *next;
    static node *prev;

    node(): val(0), next(0) {}
    node(T v): val(v), next(0) {
        if (prev != 0)
            prev-&gt;next = this;
        prev = this;
    }
};
template &lt;typename T&gt;
node *node&lt;T&gt;::prev = 0;

}

int main()
{
    using namespace linkedlist;
    node&lt;char&gt; x('S');
    node&lt;char&gt; y('R');
    node&lt;char&gt; z('1');
    for (;; x = *x.next) {
        std::cout &lt;&lt; x.val;
        if (!x.next) break;
    }
    return 0;
}
</code></pre>
<p>Funktioniert aber nicht <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="😞"
    /></p>
<p>EDIT: Es muss irgendwie am Pointer liegen. Wenn ich ein normales static node deklariere, kann ich es auch definieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2163525</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2163525</guid><dc:creator><![CDATA[mortified_penguin]]></dc:creator><pubDate>Wed, 04 Jan 2012 08:28:10 GMT</pubDate></item><item><title><![CDATA[Reply to Definition eines statischen template-struct-members on Wed, 04 Jan 2012 08:56:14 GMT]]></title><description><![CDATA[<p>Das Problem hat sich erledigt.</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
struct node
{
    T val;
    node *next;
    static node&lt;T&gt; *prev;

    node(): val(0), next(0) {}
    node(T v): val(v), next(0) {
        if (prev != 0)
            prev-&gt;next = this;
        prev = this;
    }
};
template &lt;typename T&gt; node&lt;T&gt; *node&lt;T&gt;::prev = 0;
</code></pre>
<p>Funktioniert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2163540</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2163540</guid><dc:creator><![CDATA[mortified_penguin]]></dc:creator><pubDate>Wed, 04 Jan 2012 08:56:14 GMT</pubDate></item><item><title><![CDATA[Reply to Definition eines statischen template-struct-members on Wed, 04 Jan 2012 09:08:04 GMT]]></title><description><![CDATA[<p>mortified_penguin schrieb:</p>
<blockquote>
<p>Das Problem hat sich erledigt.</p>
</blockquote>
<p>Wundert mich - dass es vorher nicht funktioniert haben soll. Ist nämlich der selbe Code (der Zeilenumbruch ist wurscht).</p>
<p>Zum &quot;static üben&quot; solltest du ein Übungsbeispiel verwenden, wo static sinn macht. In deinem Fall macht es keinen Sinn und führt spätestens bei mehreren Threads zu fehlerhaftem Verhalten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2163546</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2163546</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 04 Jan 2012 09:08:04 GMT</pubDate></item><item><title><![CDATA[Reply to Definition eines statischen template-struct-members on Wed, 04 Jan 2012 09:45:45 GMT]]></title><description><![CDATA[<p>Mach dat static-Dingen weg. So kannst Du nur eine einzige Liste verwenden. Das geht auch besser.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2163553</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2163553</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Wed, 04 Jan 2012 09:45:45 GMT</pubDate></item></channel></rss>