<?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[Kompilierfehler mit g++]]></title><description><![CDATA[<p>Hi,<br />
folgender Beispielcode:</p>
<pre><code class="language-cpp">template&lt;int I&gt;
class Foo
{
public:
    struct Struct
    {
    };
};

template&lt;int I&gt;
class Bar
{
public:
    typedef Foo&lt;I&gt; FooBar;
    typedef FooBar::Struct FooStruct; // &lt;&lt;&lt; Zeile 20
};
</code></pre>
<p>g++ (4.1.2) kompiliert den Code nicht. Meldung:</p>
<pre><code>Main.cpp:20: error: type ‘Foo&lt;I&gt;’ is not derived from type ‘Bar&lt;I&gt;’
Main.cpp:20: error: expected ‘;’ before ‘FooStruct’
</code></pre>
<p>Ich kann damit absolut nichts anfangen.<br />
Kommentiere ich Zeile 20 aus (nur diese!), funkioniert das Kompilieren.<br />
Ersetze ich FooBar::Struct durch Foo&lt;I&gt;::Struct aendert sich nichts.<br />
VS 2005 Express kompiliert es (glaube ich, kanns gerade nicht testen, vorhin ging es, habe aber noch ein paar Aenderungen machen muessen).</p>
<p>Funktioniert er bei euch? Oder sieht jemand einen Fehler?</p>
<p>Gruss,<br />
DeSoVoDaMu</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/181368/kompilierfehler-mit-g</link><generator>RSS for Node</generator><lastBuildDate>Tue, 22 Sep 2026 07:12:57 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/181368.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 12 May 2007 23:14:40 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Kompilierfehler mit g++ on Sat, 12 May 2007 23:14:40 GMT]]></title><description><![CDATA[<p>Hi,<br />
folgender Beispielcode:</p>
<pre><code class="language-cpp">template&lt;int I&gt;
class Foo
{
public:
    struct Struct
    {
    };
};

template&lt;int I&gt;
class Bar
{
public:
    typedef Foo&lt;I&gt; FooBar;
    typedef FooBar::Struct FooStruct; // &lt;&lt;&lt; Zeile 20
};
</code></pre>
<p>g++ (4.1.2) kompiliert den Code nicht. Meldung:</p>
<pre><code>Main.cpp:20: error: type ‘Foo&lt;I&gt;’ is not derived from type ‘Bar&lt;I&gt;’
Main.cpp:20: error: expected ‘;’ before ‘FooStruct’
</code></pre>
<p>Ich kann damit absolut nichts anfangen.<br />
Kommentiere ich Zeile 20 aus (nur diese!), funkioniert das Kompilieren.<br />
Ersetze ich FooBar::Struct durch Foo&lt;I&gt;::Struct aendert sich nichts.<br />
VS 2005 Express kompiliert es (glaube ich, kanns gerade nicht testen, vorhin ging es, habe aber noch ein paar Aenderungen machen muessen).</p>
<p>Funktioniert er bei euch? Oder sieht jemand einen Fehler?</p>
<p>Gruss,<br />
DeSoVoDaMu</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1283789</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1283789</guid><dc:creator><![CDATA[DeSoVoDaMu]]></dc:creator><pubDate>Sat, 12 May 2007 23:14:40 GMT</pubDate></item><item><title><![CDATA[Reply to Kompilierfehler mit g++ on Sat, 12 May 2007 23:36:45 GMT]]></title><description><![CDATA[<p>Argh...es fehlte noch ein &quot;typename&quot; vor FooBar::Struct. Passiert mir doch immer wieder...<br />
Wenigstens ein Compiler gibt hier vernuenftige Fehlermeldungen <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>Hat vllt jemand eine ordentliche Erklaerung, warum da typename stehen muss?<br />
Habe auf die Schnelle das hier gefunden <a href="http://publib.boulder.ibm.com/infocenter/macxhelp/v6v81/index.jsp?topic=/com.ibm.vacpp6m.doc/language/ref/clrc16keyword_typename.htm" rel="nofollow">http://publib.boulder.ibm.com/infocenter/macxhelp/v6v81/index.jsp?topic=/com.ibm.vacpp6m.doc/language/ref/clrc16keyword_typename.htm</a><br />
aber irgendwie sind doch beide Beispiele nicht auf meins zu beziehen. Es kann nicht als Funktionsaufruf interpretiert werden und &quot;ill-formed&quot; ist es doch auch nicht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>naja...<br />
gn8 all</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1283793</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1283793</guid><dc:creator><![CDATA[DeSoVoDaMu]]></dc:creator><pubDate>Sat, 12 May 2007 23:36:45 GMT</pubDate></item><item><title><![CDATA[Reply to Kompilierfehler mit g++ on Sun, 13 May 2007 09:53:08 GMT]]></title><description><![CDATA[<p>DeSoVoDaMu schrieb:</p>
<blockquote>
<p>aber irgendwie sind doch beide Beispiele nicht auf meins zu beziehen.</p>
</blockquote>
<p>Ganz einfach: *jeder* verschachtelte Typ, dessen umgebender Typ von einem Typenparameter abhängt, muss mit 'typename' versehen werden.</p>
<p>Also:</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
struct vector {
    typedef /* … */ iterator;
};

template &lt;typename T&gt;
struct test {
    typename vector&lt;T&gt;::iterator i;
    typedef typename vector&lt;T&gt;::iterator It_t;
    // Aber hier ohne 'typename':
    It_t j;
    vector&lt;int&gt;::iterator k;
};
</code></pre>
<p>/EDIT: Noch'n Fall hinzugefügt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1283884</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1283884</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Sun, 13 May 2007 09:53:08 GMT</pubDate></item></channel></rss>