<?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 - &amp;quot;Abhängiger Name ist kein Typ&amp;quot;]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein Problem mit Templates.</p>
<p>Kurz zu meinem theoretischen Problem:</p>
<p>Ich habe eine Template Klasse, die bis auf einen Parameter nur konstante Parameter enthalten soll.</p>
<p>Beispiel:</p>
<pre><code class="language-cpp">std::map&lt;std::string, T&gt; mit T als Template-Parameter
</code></pre>
<p>Da es keine Template-Typedefs gibt, helfe ich mir mit einer Zwischen-Struktur:</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
struct StringMap {
  typedef std::map&lt;std::string, T&gt; Type;
};
</code></pre>
<p>Soweit funktioniert das auch einwandfrei, über StringMap&lt;int&gt;::Type kann ich darauf zugreifen.</p>
<p>Jetzt geht's aber weiter.</p>
<p>Ich habe eine andere Klasse, die eine Methode besitzt, die eben eine std::map&lt;std::string, T&gt; zurückgeben soll, allerdings über die Hilfsstruktur (damit es übersichtlicher ist).</p>
<p>Das sieht wie folgt aus (als Beispiel):</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
class AndereKlasse {
public:
  StringMap&lt;T&gt;::Type* getStringMap(int i) {
    // ...
  }
};
</code></pre>
<p>Das Problem ist: In der Zeile StringMap&lt;T&gt;::Type* getStringMap(int i) beschwert sich mein Compiler darüber: &quot;warning C4346: 'StringMap&lt;T&gt;::Type': Abhängiger Name ist kein Typ&quot;, error C2143: Syntaxfehler: Es fehlt ';' vor '*' etc.</p>
<p>Das Merkwürdige ist: Im Funktionsrumpf kann ich Variablen von dem Typen deklarieren etc., nur als Rückgabetyp wird es nicht anerkannt?</p>
<p>Meine Frage: wieso nicht?</p>
<p>PS.: Ich benutze MSVC++ 2008.<br />
PPS.: Ohne die Hilfsstruktur auf direktem Wege (std::map&lt;std::string, T&gt;* getStringMap(int i) ...) funktioniert es, den Weg möchte ich aber nicht gehen, denn das wird zu unübersichtlich, std::map dient hier lediglich als Beispiel)</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/218274/templates-quot-abhängiger-name-ist-kein-typ-quot</link><generator>RSS for Node</generator><lastBuildDate>Fri, 09 Oct 2026 13:21:54 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/218274.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 18 Jul 2008 12:21:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Templates - &amp;quot;Abhängiger Name ist kein Typ&amp;quot; on Fri, 18 Jul 2008 12:21:18 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein Problem mit Templates.</p>
<p>Kurz zu meinem theoretischen Problem:</p>
<p>Ich habe eine Template Klasse, die bis auf einen Parameter nur konstante Parameter enthalten soll.</p>
<p>Beispiel:</p>
<pre><code class="language-cpp">std::map&lt;std::string, T&gt; mit T als Template-Parameter
</code></pre>
<p>Da es keine Template-Typedefs gibt, helfe ich mir mit einer Zwischen-Struktur:</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
struct StringMap {
  typedef std::map&lt;std::string, T&gt; Type;
};
</code></pre>
<p>Soweit funktioniert das auch einwandfrei, über StringMap&lt;int&gt;::Type kann ich darauf zugreifen.</p>
<p>Jetzt geht's aber weiter.</p>
<p>Ich habe eine andere Klasse, die eine Methode besitzt, die eben eine std::map&lt;std::string, T&gt; zurückgeben soll, allerdings über die Hilfsstruktur (damit es übersichtlicher ist).</p>
<p>Das sieht wie folgt aus (als Beispiel):</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
class AndereKlasse {
public:
  StringMap&lt;T&gt;::Type* getStringMap(int i) {
    // ...
  }
};
</code></pre>
<p>Das Problem ist: In der Zeile StringMap&lt;T&gt;::Type* getStringMap(int i) beschwert sich mein Compiler darüber: &quot;warning C4346: 'StringMap&lt;T&gt;::Type': Abhängiger Name ist kein Typ&quot;, error C2143: Syntaxfehler: Es fehlt ';' vor '*' etc.</p>
<p>Das Merkwürdige ist: Im Funktionsrumpf kann ich Variablen von dem Typen deklarieren etc., nur als Rückgabetyp wird es nicht anerkannt?</p>
<p>Meine Frage: wieso nicht?</p>
<p>PS.: Ich benutze MSVC++ 2008.<br />
PPS.: Ohne die Hilfsstruktur auf direktem Wege (std::map&lt;std::string, T&gt;* getStringMap(int i) ...) funktioniert es, den Weg möchte ich aber nicht gehen, denn das wird zu unübersichtlich, std::map dient hier lediglich als Beispiel)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1549363</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1549363</guid><dc:creator><![CDATA[asddgj]]></dc:creator><pubDate>Fri, 18 Jul 2008 12:21:18 GMT</pubDate></item><item><title><![CDATA[Reply to Templates - &amp;quot;Abhängiger Name ist kein Typ&amp;quot; on Fri, 18 Jul 2008 12:28:54 GMT]]></title><description><![CDATA[<p>StringMap&lt;T&gt;::Type ist für den Compiler kein Typ, du mußt noch typename davor schreiben. Weil er denkt, das Type schon eine Variable ist.<br />
Kann man auch im Scott Meyers nachlesen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1549368</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1549368</guid><dc:creator><![CDATA[Strolch]]></dc:creator><pubDate>Fri, 18 Jul 2008 12:28:54 GMT</pubDate></item><item><title><![CDATA[Reply to Templates - &amp;quot;Abhängiger Name ist kein Typ&amp;quot; on Fri, 18 Jul 2008 12:32:26 GMT]]></title><description><![CDATA[<p>asddgj schrieb:</p>
<blockquote>
<p>Hallo,</p>
<p>ich habe ein Problem mit Templates.</p>
<p>Kurz zu meinem theoretischen Problem:</p>
<p>Ich habe eine Template Klasse, die bis auf einen Parameter nur konstante Parameter enthalten soll.</p>
<p>Beispiel:</p>
<pre><code class="language-cpp">std::map&lt;std::string, T&gt; mit T als Template-Parameter
</code></pre>
<p>Da es keine Template-Typedefs gibt, helfe ich mir mit einer Zwischen-Struktur:</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
struct StringMap {
  typedef std::map&lt;std::string, T&gt; Type;
};
</code></pre>
<p>Soweit funktioniert das auch einwandfrei, über StringMap&lt;int&gt;::Type kann ich darauf zugreifen.</p>
<p>Jetzt geht's aber weiter.</p>
<p>Ich habe eine andere Klasse, die eine Methode besitzt, die eben eine std::map&lt;std::string, T&gt; zurückgeben soll, allerdings über die Hilfsstruktur (damit es übersichtlicher ist).</p>
<p>Das sieht wie folgt aus (als Beispiel):</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
class AndereKlasse {
public:
  StringMap&lt;T&gt;::Type* getStringMap(int i) {
    // ...
  }
};
</code></pre>
<p>Das Problem ist: In der Zeile StringMap&lt;T&gt;::Type* getStringMap(int i) beschwert sich mein Compiler darüber: &quot;warning C4346: 'StringMap&lt;T&gt;::Type': Abhängiger Name ist kein Typ&quot;, error C2143: Syntaxfehler: Es fehlt ';' vor '*' etc.</p>
<p>Das Merkwürdige ist: Im Funktionsrumpf kann ich Variablen von dem Typen deklarieren etc., nur als Rückgabetyp wird es nicht anerkannt?</p>
<p>Meine Frage: wieso nicht?</p>
</blockquote>
<p>Weil dein Compiler spinnt!</p>
<p>Probier das mal mit einem aktuellen g++.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1549371</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1549371</guid><dc:creator><![CDATA[bladerunner10]]></dc:creator><pubDate>Fri, 18 Jul 2008 12:32:26 GMT</pubDate></item><item><title><![CDATA[Reply to Templates - &amp;quot;Abhängiger Name ist kein Typ&amp;quot; on Fri, 18 Jul 2008 12:34:30 GMT]]></title><description><![CDATA[<p>Nein, der Compiler spinnt nicht! Das ist Standard-konform! Woher soll er das auch wissen? Ist ja ein Template im Template. Das kann der nicht auflösen, da muß man halt mal typename davor schreiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1549373</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1549373</guid><dc:creator><![CDATA[Strolch]]></dc:creator><pubDate>Fri, 18 Jul 2008 12:34:30 GMT</pubDate></item><item><title><![CDATA[Reply to Templates - &amp;quot;Abhängiger Name ist kein Typ&amp;quot; on Fri, 18 Jul 2008 12:36:06 GMT]]></title><description><![CDATA[<p>MS-Bashing sollte man nur dann machen, wenn man sich seiner Vorurteile auch sicher ist. <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="🙄"
    /> Sonst wirds peinlich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1549374</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1549374</guid><dc:creator><![CDATA[Strolch]]></dc:creator><pubDate>Fri, 18 Jul 2008 12:36:06 GMT</pubDate></item><item><title><![CDATA[Reply to Templates - &amp;quot;Abhängiger Name ist kein Typ&amp;quot; on Fri, 18 Jul 2008 12:37:25 GMT]]></title><description><![CDATA[<p>Strolch schrieb:</p>
<blockquote>
<p>StringMap&lt;T&gt;::Type ist für den Compiler kein Typ, du mußt noch typename davor schreiben. Weil er denkt, das Type schon eine Variable ist.<br />
Kann man auch im Scott Meyers nachlesen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<p>Danke, hat geholfen <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/1549376</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1549376</guid><dc:creator><![CDATA[asddgj]]></dc:creator><pubDate>Fri, 18 Jul 2008 12:37:25 GMT</pubDate></item><item><title><![CDATA[Reply to Templates - &amp;quot;Abhängiger Name ist kein Typ&amp;quot; on Fri, 18 Jul 2008 12:39:03 GMT]]></title><description><![CDATA[<p>Strolch schrieb:</p>
<blockquote>
<p>Nein, der Compiler spinnt nicht! Das ist Standard-konform! Woher soll er das auch wissen? Ist ja ein Template im Template. Das kann der nicht auflösen, da muß man halt mal typename davor schreiben.</p>
</blockquote>
<p>Du lese könne?</p>
<p>Der MSVC2008 erlaubt es an einigen Stellen, das 'typename' wegzulassen wo es<br />
erforderlich ist!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1549380</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1549380</guid><dc:creator><![CDATA[bladerunner10]]></dc:creator><pubDate>Fri, 18 Jul 2008 12:39:03 GMT</pubDate></item><item><title><![CDATA[Reply to Templates - &amp;quot;Abhängiger Name ist kein Typ&amp;quot; on Fri, 18 Jul 2008 12:43:03 GMT]]></title><description><![CDATA[<p>bladerunner10 schrieb:</p>
<blockquote>
<p>Strolch schrieb:</p>
<blockquote>
<p>Nein, der Compiler spinnt nicht! Das ist Standard-konform! Woher soll er das auch wissen? Ist ja ein Template im Template. Das kann der nicht auflösen, da muß man halt mal typename davor schreiben.</p>
</blockquote>
<p>Du lese könne?</p>
<p>Der MSVC2008 erlaubt es an einigen Stellen, das 'typename' wegzulassen wo es<br />
erforderlich ist!</p>
</blockquote>
<p>Blub! Im gegensatz zu dir, habe ich eine Lösung (die anscheinend geholfen hat) geliefert.<br />
Und weiterhin, was hat das weglassen können, mit einem hinschreiben müssen zutun???<br />
Compiler wechseln... haha! Dabei braucht man nur typename hinschreiben. Wenn in deinem Badezimmer die Glühbirne nicht angeht, wechselst du anscheinend die ganze Wohnung, oder wie?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1549383</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1549383</guid><dc:creator><![CDATA[Strolch]]></dc:creator><pubDate>Fri, 18 Jul 2008 12:43:03 GMT</pubDate></item><item><title><![CDATA[Reply to Templates - &amp;quot;Abhängiger Name ist kein Typ&amp;quot; on Fri, 18 Jul 2008 12:52:36 GMT]]></title><description><![CDATA[<p>Strolch schrieb:</p>
<blockquote>
<p>bladerunner10 schrieb:</p>
<blockquote>
<p>Strolch schrieb:</p>
<blockquote>
<p>Nein, der Compiler spinnt nicht! Das ist Standard-konform! Woher soll er das auch wissen? Ist ja ein Template im Template. Das kann der nicht auflösen, da muß man halt mal typename davor schreiben.</p>
</blockquote>
<p>Du lese könne?</p>
<p>Der MSVC2008 erlaubt es an einigen Stellen, das 'typename' wegzulassen wo es<br />
erforderlich ist!</p>
</blockquote>
<p>Blub! Im gegensatz zu dir, habe ich eine Lösung (die anscheinend geholfen hat) geliefert.</p>
</blockquote>
<p>Genau. Er hat jetzt Code, der von einem Standard-konformeren Compiler nicht mehr akzeptiert wird. Super!</p>
<p>Strolch schrieb:</p>
<blockquote>
<p>Und weiterhin, was hat das weglassen können, mit einem hinschreiben müssen zutun???</p>
</blockquote>
<p>Der OP wunderte sich, daß er eben an enigen Stellen diesen Fehler nicht bekam.</p>
<p>Strolch schrieb:</p>
<blockquote>
<p>Compiler wechseln... haha! Dabei braucht man nur typename hinschreiben. Wenn in deinem Badezimmer die Glühbirne nicht angeht, wechselst du anscheinend die ganze Wohnung, oder wie?</p>
</blockquote>
<p>Offensichtlich kann es nicht so verkehrt sein, seinen Kot mal mit einem<br />
anderen Compiler zu übersetzen.</p>
<p>(Ach ja: Wir haben nur Kerzen...)</p>
<p>EDIT: Ansonsten ist es natürlich absolut richtig, an den ensprechenden Stellen ein 'typename' einzufügen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1549384</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1549384</guid><dc:creator><![CDATA[bladerunner10]]></dc:creator><pubDate>Fri, 18 Jul 2008 12:52:36 GMT</pubDate></item><item><title><![CDATA[Reply to Templates - &amp;quot;Abhängiger Name ist kein Typ&amp;quot; on Fri, 18 Jul 2008 12:58:57 GMT]]></title><description><![CDATA[<p>bladerunner10 schrieb:</p>
<blockquote>
<p>Genau. Er hat jetzt Code, der von einem Standard-konformeren Compiler nicht mehr akzeptiert wird. Super!</p>
</blockquote>
<p>Warum ist deshalb die Lösung falsch? Besser wäre natürlich ein ergänzender Kommentar gewesen &quot;dort, wo Dein Compiler nicht meckert, fehlt aber trotzdem ebenfalls typename&quot;.</p>
<p>Ich muss übrigens zugeben, dass nicht nur Strolch Deine Aussage missverstanden hat. Im Übrigen braucht Ihr Euch deshalb nicht an die Gurgel zu gehen <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>
<blockquote>
<p>EDIT: Ansonsten ist es natürlich absolut richtig, an den ensprechenden Stellen ein 'typename' einzufügen!</p>
</blockquote>
<p>Eben!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1549390</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1549390</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Fri, 18 Jul 2008 12:58:57 GMT</pubDate></item><item><title><![CDATA[Reply to Templates - &amp;quot;Abhängiger Name ist kein Typ&amp;quot; on Fri, 18 Jul 2008 13:00:46 GMT]]></title><description><![CDATA[<blockquote>
<p>Genau. Er hat jetzt Code, der von einem Standard-konformeren Compiler nicht mehr akzeptiert wird. Super!</p>
</blockquote>
<p>Klar, er war ja vorher standard-konform. Wie konnte ich nur vergessen, das er jetzt nicht mehr akzeptiert wird. Lief ja vorher ohne typename ganz sicherlich besser als im g++?!<br />
Oder wie passt das:</p>
<blockquote>
<p>Ansonsten ist es natürlich absolut richtig, an den ensprechenden Stellen ein 'typename' einzufügen!</p>
</blockquote>
<p>Und mir dann unterstellen, das ich den Code jetzt unkonformer/unrichtiger gemacht habe. LOL! Pass lieber auf deine Wortwahl auf!<br />
Hätteste mal ein paar ausführliche Sätze geschrieben, anstatt nur &quot;Dein Compiler spinnt!&quot;, hätten wir alle was davon gehabt. Jetzt brauchste auch nicht mehr den Schlauberger raushängen lassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1549393</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1549393</guid><dc:creator><![CDATA[Strolch]]></dc:creator><pubDate>Fri, 18 Jul 2008 13:00:46 GMT</pubDate></item><item><title><![CDATA[Reply to Templates - &amp;quot;Abhängiger Name ist kein Typ&amp;quot; on Fri, 18 Jul 2008 15:52:02 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/18986">@bladerunner10</a><br />
Vielleicht solltest du dich etwas genauer ausdrücken. Deine Kommentare hierzu sind einfach Mist. Ich gehe davon aus dass du weisst worum es geht und wo das typename hingehört und wo nicht, aber das hilft niemandem wenn man deine Antworten nicht verstehen kann.</p>
<p>Das &quot;weil dein compiler spinnt&quot; klingt für jmd. der es nicht besser weiss und daher hier fragt vermutlich danach dass du meinst die Warning bzw. der Fehler kommt nur daher weil der Compiler spinnt.</p>
<p>Dann redet dich jmd. darauf an und du wirst patzig. Toll. 10 Punkte für guten Stil <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1549488</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1549488</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 18 Jul 2008 15:52:02 GMT</pubDate></item></channel></rss>