<?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[Forwarddeclaration von inneren templateklassen]]></title><description><![CDATA[<p>Hallo,<br />
ich habe eine Templateklasse (bin_tree), die eine Innere Template-Klasse (element) besitzt ich möchte jedoch auch, dass die innere klasse ein template ist.</p>
<pre><code>template &lt;class T&gt;
class bin_tree{
    public:
        typedef T data_type;
    private:
        template &lt;class U&gt;
        class element{
            public:
                element();
            private:
                U data;
                std::shared_ptr&lt;element&gt; left;
                std::shared_ptr&lt;element&gt; right;
                std::shared_ptr&lt;element&gt; parent;
        };
        typedef element&lt;data_type&gt; elem;
        elem root;
};
</code></pre>
<p>diese sache kompiliert auch schön.</p>
<p>zwecks der übersicht würde ich gerne die innere klasse element aus der oberklasse rausnehmen.</p>
<pre><code>template &lt;class T&gt;
class bin_tree{
    public:
        typedef T data_type;
    private:
        template &lt;typename U&gt;
            class element;  //forward declaration von tree-element
        typedef element&lt;data_type&gt; elem;
        elem root;
};

template &lt;class T&gt;
class bin_tree&lt;T&gt;::element{
    public:
        typedef T data_type;
    private:
        data_type data;
        std::shared_ptr&lt;element&gt; left;
        std::shared_ptr&lt;element&gt; right;
        std::shared_ptr&lt;element&gt; parent;
};
</code></pre>
<p>dazu bekomme ich folgende fehlermeldung:</p>
<pre><code>In file included from bsp2.cpp:2:0:
bin_tree.h:17:20: error: too few template-parameter-lists
bin_tree.h: In instantiation of ‘class bin_tree&lt;int&gt;’:
bsp2.cpp:6:19:   required from here
bin_tree.h:13:14: error: ‘bin_tree&lt;T&gt;::root’ has incomplete type
bin_tree.h:11:19: error: declaration of ‘bin_tree&lt;int&gt;::elem {aka class bin_tree&lt;int&gt;::element&lt;int&gt;}’
In file included from bin_tree.cpp:1:0:
bin_tree.h:17:20: error: too few template-parameter-lists
In file included from bin_tree_element.h:5:0,
                 from bin_tree_element.cpp:1:
bin_tree.h:17:20: error: too few template-parameter-lists
</code></pre>
<p>Hat jemand eine idee, wie das geht?</p>
<p>und ja ich weiß es gibt auch schon die fix fertigen bibliotheken für die binären bäume. ich muss es aber für die uni in c++ implementieren.</p>
<p>lg + danke</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/316063/forwarddeclaration-von-inneren-templateklassen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 30 Jul 2026 09:36:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/316063.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 20 Apr 2013 14:47:26 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Forwarddeclaration von inneren templateklassen on Sat, 20 Apr 2013 14:47:26 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich habe eine Templateklasse (bin_tree), die eine Innere Template-Klasse (element) besitzt ich möchte jedoch auch, dass die innere klasse ein template ist.</p>
<pre><code>template &lt;class T&gt;
class bin_tree{
    public:
        typedef T data_type;
    private:
        template &lt;class U&gt;
        class element{
            public:
                element();
            private:
                U data;
                std::shared_ptr&lt;element&gt; left;
                std::shared_ptr&lt;element&gt; right;
                std::shared_ptr&lt;element&gt; parent;
        };
        typedef element&lt;data_type&gt; elem;
        elem root;
};
</code></pre>
<p>diese sache kompiliert auch schön.</p>
<p>zwecks der übersicht würde ich gerne die innere klasse element aus der oberklasse rausnehmen.</p>
<pre><code>template &lt;class T&gt;
class bin_tree{
    public:
        typedef T data_type;
    private:
        template &lt;typename U&gt;
            class element;  //forward declaration von tree-element
        typedef element&lt;data_type&gt; elem;
        elem root;
};

template &lt;class T&gt;
class bin_tree&lt;T&gt;::element{
    public:
        typedef T data_type;
    private:
        data_type data;
        std::shared_ptr&lt;element&gt; left;
        std::shared_ptr&lt;element&gt; right;
        std::shared_ptr&lt;element&gt; parent;
};
</code></pre>
<p>dazu bekomme ich folgende fehlermeldung:</p>
<pre><code>In file included from bsp2.cpp:2:0:
bin_tree.h:17:20: error: too few template-parameter-lists
bin_tree.h: In instantiation of ‘class bin_tree&lt;int&gt;’:
bsp2.cpp:6:19:   required from here
bin_tree.h:13:14: error: ‘bin_tree&lt;T&gt;::root’ has incomplete type
bin_tree.h:11:19: error: declaration of ‘bin_tree&lt;int&gt;::elem {aka class bin_tree&lt;int&gt;::element&lt;int&gt;}’
In file included from bin_tree.cpp:1:0:
bin_tree.h:17:20: error: too few template-parameter-lists
In file included from bin_tree_element.h:5:0,
                 from bin_tree_element.cpp:1:
bin_tree.h:17:20: error: too few template-parameter-lists
</code></pre>
<p>Hat jemand eine idee, wie das geht?</p>
<p>und ja ich weiß es gibt auch schon die fix fertigen bibliotheken für die binären bäume. ich muss es aber für die uni in c++ implementieren.</p>
<p>lg + danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2317016</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2317016</guid><dc:creator><![CDATA[erdbeergulasch]]></dc:creator><pubDate>Sat, 20 Apr 2013 14:47:26 GMT</pubDate></item><item><title><![CDATA[Reply to Forwarddeclaration von inneren templateklassen on Sat, 20 Apr 2013 15:04:56 GMT]]></title><description><![CDATA[<p>Edit: <em>Mist entfernt</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2317017</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2317017</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 20 Apr 2013 15:04:56 GMT</pubDate></item><item><title><![CDATA[Reply to Forwarddeclaration von inneren templateklassen on Sat, 20 Apr 2013 15:06:50 GMT]]></title><description><![CDATA[<p>hallo gnihihihihi, danke für die antwort, aber wenn ich richtig informiert bin regeln die friends ja nur die zugriffsrechte. das ist aber leider nicht das was ich will.</p>
<p>wie gesagt ich will ja nicht die klasse elememt an sich rausziehen, sondern nur die definition im header. zwecks übersichtlichkeit (also kosmetisch)</p>
<p>im endeffekt sollte die klasse element trotzdem eine innere klasse von bin_tree sein, obwohl sie draußen steht.</p>
<p>ich will sie auch nicht als friend deklarieren, denn ich will sowieso nur über bestimmte methoden die ich public setze drauf zugreifen.</p>
<p>lg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2317020</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2317020</guid><dc:creator><![CDATA[erdbeergulasch]]></dc:creator><pubDate>Sat, 20 Apr 2013 15:06:50 GMT</pubDate></item><item><title><![CDATA[Reply to Forwarddeclaration von inneren templateklassen on Sat, 20 Apr 2013 15:16:55 GMT]]></title><description><![CDATA[<p>So:</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
class B{
public:
    template&lt;typename X&gt;
    class A;
};

template&lt;typename T&gt;
template&lt;typename X&gt;
class B&lt;T&gt;::A{
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2317021</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2317021</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 20 Apr 2013 15:16:55 GMT</pubDate></item><item><title><![CDATA[Reply to Forwarddeclaration von inneren templateklassen on Sat, 20 Apr 2013 15:20:35 GMT]]></title><description><![CDATA[<p>gnihihihihi Du bist der beste...</p>
<p>dankeschön. <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>allein wär ich da nie draufkommen.<br />
wo schaust du da nach, bzw. wie bist du auf das gekommen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2317022</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2317022</guid><dc:creator><![CDATA[erdbeergulasch]]></dc:creator><pubDate>Sat, 20 Apr 2013 15:20:35 GMT</pubDate></item><item><title><![CDATA[Reply to Forwarddeclaration von inneren templateklassen on Sat, 20 Apr 2013 15:28:48 GMT]]></title><description><![CDATA[<p>erdbeergulasch schrieb:</p>
<blockquote>
<p>[...]wie bist du auf das gekommen?</p>
</blockquote>
<p>Indem ich deinen Beitrag nochmal gelesen habe <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /><br />
Hab manchmal Bierdeckel vor den Augen <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>Dein Compiler sagts eigentlich schon:</p>
<pre><code>error: too few template-parameter-lists
</code></pre>
<p>Da es sich um eine Template-Klasse innerhalb einer Template-Klasse handelt müssen auch zwei Template-Parameter verwendet werden.</p>
<p>Edit: Trotzdem bin ich der Meinung, dass die innere Klasse kein Template sein sollte. Du gibst ja schon im bin_tree an mit welchem Typen du schlussendlich arbeiten willst, da fände ich z.b. ein <code>bin_tree&lt;int&gt;::element&lt;float&gt;</code> äußerst unlogisch.<br />
Oder was willstn mit dem zweiten Template-Parameter anfangen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2317025</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2317025</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 20 Apr 2013 15:28:48 GMT</pubDate></item><item><title><![CDATA[Reply to Forwarddeclaration von inneren templateklassen on Sat, 20 Apr 2013 15:29:19 GMT]]></title><description><![CDATA[<p>Ja, ich hab die Fehlermeldung auch so interpretiert, dass noch ein parameter fehlt, aber ich habe ständig sowas geschrieben und mich gewundert warums nicht geht...</p>
<pre><code>template &lt;typename T, typename U&gt;
class bin_tree&lt;T&gt;::element{
...
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2317027</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2317027</guid><dc:creator><![CDATA[erdbeergulasch]]></dc:creator><pubDate>Sat, 20 Apr 2013 15:29:19 GMT</pubDate></item><item><title><![CDATA[Reply to Forwarddeclaration von inneren templateklassen on Sat, 20 Apr 2013 16:11:25 GMT]]></title><description><![CDATA[<p>Du schreibst ja auch nicht:</p>
<pre><code>template &lt;typename T&gt;
class foo
{
public:
    template &lt;typename U&gt;
    void bar();
};

template &lt;typename T, typename U&gt;
void foo&lt;T&gt;::bar()
{

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2317033</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2317033</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Sat, 20 Apr 2013 16:11:25 GMT</pubDate></item></channel></rss>