<?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[problem bei mischung template und enum]]></title><description><![CDATA[<pre><code class="language-cpp">template &lt;class tresult, class targument, unsigned int n&gt;
class cmonomial
{
	public:
 		//...
		enum monomial_order {LEX, GRLEX, GREVLEX};

		static void set_order(monomial_order order);
		static int get_order();

	private:

		static monomial_order _order;

};

template &lt;class tresult, class targument, unsigned int n&gt;
cmonomial&lt;tresult, targument, n&gt;::monomial_order cmonomial&lt;tresult, targument, n&gt;::_order = cmonomial&lt;tresult, targument, n&gt;::LEX;
</code></pre>
<p>da bekomme ich folgende fehlermeldung</p>
<pre><code>warning C4346: 'cmonomial&lt;tresult,targument,n&gt;::monomial_order' : dependent name is not a type
        prefix with 'typename' to indicate a type
</code></pre>
<p>damit kann ich aber irgendwie nicht viel anfangen, vllt hat ja wer nen vorschlag.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/181277/problem-bei-mischung-template-und-enum</link><generator>RSS for Node</generator><lastBuildDate>Tue, 22 Sep 2026 05:37:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/181277.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 11 May 2007 19:41:16 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to problem bei mischung template und enum on Fri, 11 May 2007 19:41:16 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">template &lt;class tresult, class targument, unsigned int n&gt;
class cmonomial
{
	public:
 		//...
		enum monomial_order {LEX, GRLEX, GREVLEX};

		static void set_order(monomial_order order);
		static int get_order();

	private:

		static monomial_order _order;

};

template &lt;class tresult, class targument, unsigned int n&gt;
cmonomial&lt;tresult, targument, n&gt;::monomial_order cmonomial&lt;tresult, targument, n&gt;::_order = cmonomial&lt;tresult, targument, n&gt;::LEX;
</code></pre>
<p>da bekomme ich folgende fehlermeldung</p>
<pre><code>warning C4346: 'cmonomial&lt;tresult,targument,n&gt;::monomial_order' : dependent name is not a type
        prefix with 'typename' to indicate a type
</code></pre>
<p>damit kann ich aber irgendwie nicht viel anfangen, vllt hat ja wer nen vorschlag.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1283214</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1283214</guid><dc:creator><![CDATA[StarCraftFeuerteufel]]></dc:creator><pubDate>Fri, 11 May 2007 19:41:16 GMT</pubDate></item><item><title><![CDATA[Reply to problem bei mischung template und enum on Fri, 11 May 2007 19:44:30 GMT]]></title><description><![CDATA[<p><strong>c</strong>monomial -&gt; momomial <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="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1283216</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1283216</guid><dc:creator><![CDATA[BlaBlubb]]></dc:creator><pubDate>Fri, 11 May 2007 19:44:30 GMT</pubDate></item><item><title><![CDATA[Reply to problem bei mischung template und enum on Fri, 11 May 2007 19:51:27 GMT]]></title><description><![CDATA[<p>FreakyBKA schrieb:</p>
<blockquote>
<p>damit kann ich aber irgendwie nicht viel anfangen, vllt hat ja wer nen vorschlag.</p>
</blockquote>
<p>Prefix 'cmonomial&lt;tresult,targument,n&gt;::monomial_order' with 'typename'.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1283220</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1283220</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Fri, 11 May 2007 19:51:27 GMT</pubDate></item><item><title><![CDATA[Reply to problem bei mischung template und enum on Sat, 12 May 2007 00:23:02 GMT]]></title><description><![CDATA[<p>deswegen versteh ich aber trotzdem nicht warum man das typename brauch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1283275</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1283275</guid><dc:creator><![CDATA[StarCraftFeuerteufel]]></dc:creator><pubDate>Sat, 12 May 2007 00:23:02 GMT</pubDate></item><item><title><![CDATA[Reply to problem bei mischung template und enum on Sat, 12 May 2007 00:54:24 GMT]]></title><description><![CDATA[<p>FreakyBKA schrieb:</p>
<blockquote>
<p>deswegen versteh ich aber trotzdem nicht warum man das typename brauch?</p>
</blockquote>
<p>Weil die Grammatik sonst mehrdeutig ist. Sinn der Sache ist es, Fehler möglichst schon aufspüren zu können, bevor wir das Template instantiieren.<br />
ob du</p>
<pre><code class="language-cpp">cmonomial&lt;tresult, targument, n&gt;::monomial_order
</code></pre>
<p>oder</p>
<pre><code class="language-cpp">cmonomial&lt;tresult, targument, n&gt;::_order
</code></pre>
<p>schreibst - woher soll der Compiler wissen, dass das eine ein Typ ist und das andere nicht? Das ist aber wichtig - im ersten Fall haben wir es dann in der Regel mit einer Deklaration zu tun, im anderen Fall mit einem Ausdruck. Mit Sicherheit wissen wir das aber erst, wenn wir die Templateargumente haben. Es könnte ja zum Beispiel immer noch (zur Not erst später - oder gar nicht! - definiert) Spezialiserungen geben, wo alles anders ist. Die Definition des Primärtemplates wird hier gar nicht benötigt, du könntest auch schreiben:</p>
<pre><code class="language-cpp">template &lt;class tresult, class targument, unsigned int n&gt;
class cmonomial;
template &lt;class tresult, class targument, unsigned int n&gt;
typename cmonomial&lt;tresult, targument, n&gt;::monomial_order cmonomial&lt;tresult, targument, n&gt;::_order = cmonomial&lt;tresult, targument, n&gt;::LEX;
</code></pre>
<p>(natürlich musst du das Template irgenwann mal wenigstens für Spezialisierungen, die du nutzt, definieren - aber für obige Definition ist es nicht notwendig). Durch die Verwendung von typename sagst du dem Compiler, dass der folgende Bezeichner ein Typ sein soll, notwendig (und i.d.R. nur dann zulässig) ist das, wenn du es mit einem abhängigen Bezeichner zu tun hast, also einem, dessen Bedeutung von Templateparametern abhängt oder abhängen könnte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1283277</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1283277</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sat, 12 May 2007 00:54:24 GMT</pubDate></item><item><title><![CDATA[Reply to problem bei mischung template und enum on Sat, 12 May 2007 10:12:25 GMT]]></title><description><![CDATA[<p>alles klar, jetzt hab ich verstanden, danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1283343</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1283343</guid><dc:creator><![CDATA[StarCraftFeuerteufel]]></dc:creator><pubDate>Sat, 12 May 2007 10:12:25 GMT</pubDate></item></channel></rss>