<?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 mit Iteratoren]]></title><description><![CDATA[<p>Hi,</p>
<p>Hab eine simples Problem hoffe ich.</p>
<p>Habe eine Tools.cpp angelegt, in der paar Funktionen drin sind.</p>
<p>Eine davon soll eine werden, die einen Iterator über eine Liste cyklisch navigiert.</p>
<p>Der Kopf sieht so aus:</p>
<pre><code>void CycleIncrementIterator(std::list&lt;KLASSENNAME*&gt;::iterator &amp;it,std::list&lt;KLASSENNAME*&gt; &amp;Polygons)
</code></pre>
<p>Geht auch einwandfrei!!!</p>
<p>Wenn ich das aber mit einem Template vereinfachen will zu:</p>
<pre><code>template &lt;class T&gt;
void CycleIncrementIterator2(std::list&lt;T&amp;&gt;::iterator &amp;it,std::list&lt;T&amp;&gt; &amp;Polygons)
</code></pre>
<p>kommt die Fehlermeldung:</p>
<pre><code>error C2065: 'it': nichtdeklarierter Bezeichner
error C2065: 'Polygons': nichtdeklarierter Bezeichner
error C2275: 'std::list&lt;T&amp;&gt;': Ungültige Verwendung dieses Typs als Ausdruck
error C2182: 'CycleIncrementIterator2': Unzulässige Verwendung des Typs 'void'
error C2998: 'int CycleIncrementIterator2': Kann keine Vorlagendefinition 
sein
</code></pre>
<p>Wo kann denn da mein Denkfehler sein?</p>
<p>Vielen Dank für alle Tipps</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/234123/templates-mit-iteratoren</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 14:24:20 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/234123.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 13 Feb 2009 11:22:33 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Templates mit Iteratoren on Fri, 13 Feb 2009 11:23:01 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>Hab eine simples Problem hoffe ich.</p>
<p>Habe eine Tools.cpp angelegt, in der paar Funktionen drin sind.</p>
<p>Eine davon soll eine werden, die einen Iterator über eine Liste cyklisch navigiert.</p>
<p>Der Kopf sieht so aus:</p>
<pre><code>void CycleIncrementIterator(std::list&lt;KLASSENNAME*&gt;::iterator &amp;it,std::list&lt;KLASSENNAME*&gt; &amp;Polygons)
</code></pre>
<p>Geht auch einwandfrei!!!</p>
<p>Wenn ich das aber mit einem Template vereinfachen will zu:</p>
<pre><code>template &lt;class T&gt;
void CycleIncrementIterator2(std::list&lt;T&amp;&gt;::iterator &amp;it,std::list&lt;T&amp;&gt; &amp;Polygons)
</code></pre>
<p>kommt die Fehlermeldung:</p>
<pre><code>error C2065: 'it': nichtdeklarierter Bezeichner
error C2065: 'Polygons': nichtdeklarierter Bezeichner
error C2275: 'std::list&lt;T&amp;&gt;': Ungültige Verwendung dieses Typs als Ausdruck
error C2182: 'CycleIncrementIterator2': Unzulässige Verwendung des Typs 'void'
error C2998: 'int CycleIncrementIterator2': Kann keine Vorlagendefinition 
sein
</code></pre>
<p>Wo kann denn da mein Denkfehler sein?</p>
<p>Vielen Dank für alle Tipps</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1663060</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1663060</guid><dc:creator><![CDATA[curator]]></dc:creator><pubDate>Fri, 13 Feb 2009 11:23:01 GMT</pubDate></item><item><title><![CDATA[Reply to Templates mit Iteratoren on Fri, 13 Feb 2009 11:34:10 GMT]]></title><description><![CDATA[<p>KLASSENNAME*<br />
und<br />
T&amp;</p>
<p>finde den Fehler.</p>
<p>PS:<br />
ich würde einen cycle iterator definieren der auf allen containern arbeiten kann. er muss ja nur end() kennen und kann als iterator adapter fungieren...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1663066</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1663066</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Fri, 13 Feb 2009 11:34:10 GMT</pubDate></item><item><title><![CDATA[Reply to Templates mit Iteratoren on Fri, 13 Feb 2009 11:38:26 GMT]]></title><description><![CDATA[<p>Ok, die void klasse ist leer, für den testzweck.</p>
<p>Sowohl</p>
<pre><code>template &lt;class T&gt;
void CycleIncrementIterator2(std::list&lt;T*&gt;::iterator &amp;it,std::list&lt;T*&gt; &amp;Polygons)
</code></pre>
<p>als auch</p>
<pre><code>template &lt;class T&gt;
void CycleIncrementIterator2(std::list&lt;T&gt;::iterator &amp;it,std::list&lt;T&gt; &amp;Polygons)
</code></pre>
<p>Führen zum gleichen Fehler!</p>
<p>Noch mal der Inhalt der Funktion ist</p>
<pre><code>{
}
</code></pre>
<p>Oder hab ich den Tipp nicht verstanden?</p>
<p>Tante Edit hat gerade nochmal dein PS gelesen und meint, dass dass definitiv das geilste wäre. Leider hab ich keine Idee, wie das gehen soll. Hab vorher noch nicht mit templates gearbeitet, will aber ja jetzt mal was lernen <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1663075</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1663075</guid><dc:creator><![CDATA[curator]]></dc:creator><pubDate>Fri, 13 Feb 2009 11:38:26 GMT</pubDate></item><item><title><![CDATA[Reply to Templates mit Iteratoren on Fri, 13 Feb 2009 11:49:32 GMT]]></title><description><![CDATA[<p>Ein Standardproblem: Da T zum Zeitpunkt der Deklaration noch nicht bekannt ist, ist auch list&lt;T&gt; nicht bekannt (auch wenn das Template list&lt;&gt; bereits bekannt ist - Stichwort Spezialisierung). Daher weiss der Compiler nicht, dass list&lt;T&gt;::iterator ein Typ ist (oder sein wird).</p>
<p>Um dem Compiler dies mitzuteilen, verwende <code>typename std::list&lt;T&gt;::iterator</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1663090</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1663090</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Fri, 13 Feb 2009 11:49:32 GMT</pubDate></item><item><title><![CDATA[Reply to Templates mit Iteratoren on Fri, 13 Feb 2009 13:03:03 GMT]]></title><description><![CDATA[<p>So sieht das gut aus.</p>
<p>Hab jetzt in der Header Datei die Datei formuliert, inclusive realisierung.</p>
<p>Eine Variante so</p>
<pre><code>template &lt;class T&gt;
void CycleDecrementIterator(typename std::list&lt;T&gt;::iterator &amp;it,std::list&lt;T&gt; &amp;Polygons)
</code></pre>
<p>eine so</p>
<pre><code>template &lt;class T&gt;
void CycleDecrementIterator(typename std::list&lt;T*&gt;::iterator &amp;it,std::list&lt;T*&gt; &amp;Polygons)
</code></pre>
<p>Daduch geht das 1a sowohl auf listen auf zeigen als auch auf listen von &quot;nichtzeigern&quot;^^</p>
<p>Zwei fragen hab ich noch.</p>
<p>1. Wie kriege ich die Definition der Funktion in die Cpp Datei?</p>
<p>--&gt; Muss ich über beides dieses Template schreiben? Dann springt mir der Linker an den hals.</p>
<p>2. Kann man obige Versionen Zusammenfassen?</p>
<p>Vielen Dank, es geht ja erstmal <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1663152</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1663152</guid><dc:creator><![CDATA[curator]]></dc:creator><pubDate>Fri, 13 Feb 2009 13:03:03 GMT</pubDate></item><item><title><![CDATA[Reply to Templates mit Iteratoren on Fri, 13 Feb 2009 13:08:01 GMT]]></title><description><![CDATA[<p>curator schrieb:</p>
<blockquote>
<p>Daduch geht das 1a sowohl auf listen auf zeigen als auch auf listen von &quot;nichtzeigern&quot;^^</p>
</blockquote>
<p>Dafür würde aber die erste Version reichen. Du kannst als Typ schliesslich auch ein <code>double*</code> übergeben.</p>
<p>curator schrieb:</p>
<blockquote>
<p>1. Wie kriege ich die Definition der Funktion in die Cpp Datei?</p>
<p>--&gt; Muss ich über beides dieses Template schreiben? Dann springt mir der Linker an den hals.</p>
</blockquote>
<p>Gar nicht. Templates müssen in der Headerdatei definiert werden (sofern du nicht das Schlüsselwort <code>export</code> nutzt, das fast kein Compiler unterstützt). Du kannst aber zur besseren Trennung eine .impl, .inl oder .ipp-Datei mit den Definitionen machen und diese Datei am Schluss des Headers einbinden.</p>
<p>curator schrieb:</p>
<blockquote>
<p>2. Kann man obige Versionen Zusammenfassen?</p>
</blockquote>
<p>Ja, wie gesagt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1663156</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1663156</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 13 Feb 2009 13:08:01 GMT</pubDate></item><item><title><![CDATA[Reply to Templates mit Iteratoren on Fri, 13 Feb 2009 17:56:50 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Gar nicht. Templates müssen in der Headerdatei definiert werden (sofern du nicht das Schlüsselwort <code>export</code> nutzt, das fast kein Compiler unterstützt). Du kannst aber zur besseren Trennung eine .impl, .inl oder .ipp-Datei mit den Definitionen machen und diese Datei am Schluss des Headers einbinden.</p>
</blockquote>
<p>Was natürlich für template-Spezialisierungen nicht gilt. Die kann man auch in eine .cpp packen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1663364</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1663364</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 13 Feb 2009 17:56:50 GMT</pubDate></item></channel></rss>