<?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 mit templates und iteratoren]]></title><description><![CDATA[<p>hab hier ein kleines problem, wahrscheinlich mit der syntax:</p>
<pre><code class="language-cpp">1 #include &lt;iostream&gt;
  2 #include &lt;vector&gt;
  3 
  4 using namespace std;
  5 //template &lt;typename T&gt;
  6 
  7 template&lt;typename T&gt; void showSmallNumbers(const vector&lt;T&gt; &amp;v)
  8 {
  9     vector&lt;T&gt;::iterator iter;
 10     cout &lt;&lt; &quot;Iterieren der Liste:&quot; &lt;&lt; endl;
 11     for(iter = v.begin(); iter != v.end();iter++)
 12     {
 13         cout &lt;&lt; &quot;Iterator: &quot; &lt;&lt; *iter &lt;&lt; endl;
 14     }   
 15     
 16 }   
 17 
 18 int main (int argc, char** argv)
 19 {
 20     vector&lt;double&gt; *v = new vector&lt;double&gt;[5];
 21     v-&gt;push_back(2.2);
 22     v-&gt;push_back(2.3);
 23     v-&gt;push_back(3.4);
 24     v-&gt;push_back(3.5);
 25     v-&gt;push_back(3.6);
 26     vector&lt;double&gt; d = vector&lt;double&gt;(5);
 27     showSmallNumbers(v);
 28     return 0;
 29 }
</code></pre>
<p>bei mir gibt das folgende fehlermeldung:</p>
<p>pete@pete-laptop:~/Desktop/cpp$ g++ showsmallnumbers.cpp<br />
showsmallnumbers.cpp: In function »void showSmallNumbers(const std::vector&lt;T, std::allocator&lt;_CharT&gt; &gt;&amp;)«:<br />
showsmallnumbers.cpp:10: Fehler: expected `;' before »iter«<br />
showsmallnumbers.cpp:12: Fehler: »iter« wurde in diesem Gültigkeitsbereich nicht definiert<br />
showsmallnumbers.cpp: In function »int main(int, char**)«:<br />
showsmallnumbers.cpp:28: Fehler: keine passende Funktion für Aufruf von »showSmallNumbers(std::vector&lt;double, std::allocator&lt;double&gt; &gt;*&amp;)«</p>
<p>mach ich bei der iteratordeklaration was falsch?!<br />
bzw. warum findet er keine passende funktion dafür?</p>
<p>gruss pete</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/218929/problem-mit-templates-und-iteratoren</link><generator>RSS for Node</generator><lastBuildDate>Thu, 08 Oct 2026 16:06:48 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/218929.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 27 Jul 2008 12:13:53 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to problem mit templates und iteratoren on Sun, 27 Jul 2008 12:13:53 GMT]]></title><description><![CDATA[<p>hab hier ein kleines problem, wahrscheinlich mit der syntax:</p>
<pre><code class="language-cpp">1 #include &lt;iostream&gt;
  2 #include &lt;vector&gt;
  3 
  4 using namespace std;
  5 //template &lt;typename T&gt;
  6 
  7 template&lt;typename T&gt; void showSmallNumbers(const vector&lt;T&gt; &amp;v)
  8 {
  9     vector&lt;T&gt;::iterator iter;
 10     cout &lt;&lt; &quot;Iterieren der Liste:&quot; &lt;&lt; endl;
 11     for(iter = v.begin(); iter != v.end();iter++)
 12     {
 13         cout &lt;&lt; &quot;Iterator: &quot; &lt;&lt; *iter &lt;&lt; endl;
 14     }   
 15     
 16 }   
 17 
 18 int main (int argc, char** argv)
 19 {
 20     vector&lt;double&gt; *v = new vector&lt;double&gt;[5];
 21     v-&gt;push_back(2.2);
 22     v-&gt;push_back(2.3);
 23     v-&gt;push_back(3.4);
 24     v-&gt;push_back(3.5);
 25     v-&gt;push_back(3.6);
 26     vector&lt;double&gt; d = vector&lt;double&gt;(5);
 27     showSmallNumbers(v);
 28     return 0;
 29 }
</code></pre>
<p>bei mir gibt das folgende fehlermeldung:</p>
<p>pete@pete-laptop:~/Desktop/cpp$ g++ showsmallnumbers.cpp<br />
showsmallnumbers.cpp: In function »void showSmallNumbers(const std::vector&lt;T, std::allocator&lt;_CharT&gt; &gt;&amp;)«:<br />
showsmallnumbers.cpp:10: Fehler: expected `;' before »iter«<br />
showsmallnumbers.cpp:12: Fehler: »iter« wurde in diesem Gültigkeitsbereich nicht definiert<br />
showsmallnumbers.cpp: In function »int main(int, char**)«:<br />
showsmallnumbers.cpp:28: Fehler: keine passende Funktion für Aufruf von »showSmallNumbers(std::vector&lt;double, std::allocator&lt;double&gt; &gt;*&amp;)«</p>
<p>mach ich bei der iteratordeklaration was falsch?!<br />
bzw. warum findet er keine passende funktion dafür?</p>
<p>gruss pete</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1554507</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1554507</guid><dc:creator><![CDATA[petedeluxe2k]]></dc:creator><pubDate>Sun, 27 Jul 2008 12:13:53 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit templates und iteratoren on Sun, 27 Jul 2008 12:15:59 GMT]]></title><description><![CDATA[<p>petedeluxe2k schrieb:</p>
<blockquote>
<p>mach ich bei der iteratordeklaration was falsch?!</p>
</blockquote>
<p>Ja, es fehlt ein typename davor.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1554509</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1554509</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 27 Jul 2008 12:15:59 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit templates und iteratoren on Sun, 27 Jul 2008 12:25:51 GMT]]></title><description><![CDATA[<p>der typ ist doch vector&lt;T&gt; wobei das T als template für z.B double gedacht ist?!<br />
ich versteh das jetzt nicht ganz?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1554515</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1554515</guid><dc:creator><![CDATA[petedeluxe2k]]></dc:creator><pubDate>Sun, 27 Jul 2008 12:25:51 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit templates und iteratoren on Sun, 27 Jul 2008 12:47:12 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">typename std::vector&lt;T&gt;::iterator MyIter;
</code></pre>
<p>Du musst dem Compiler mitteilen, dass <code>iterator</code> ein Typ ist, da dies bei Templates nicht immer genau gesagt werden kann.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1554523</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1554523</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sun, 27 Jul 2008 12:47:12 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit templates und iteratoren on Sun, 27 Jul 2008 13:07:05 GMT]]></title><description><![CDATA[<p>ok danke... damit ist das problem des iterators schon mal beseitigt <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="🙂"
    /><br />
warum findet er nun keine passende methode?</p>
<p>pete@pete-laptop:~/Desktop/cpp$ g++ showsmallnumbers.cpp<br />
showsmallnumbers.cpp: In function »int main(int, char**)«:<br />
showsmallnumbers.cpp:27: Fehler: keine passende Funktion für Aufruf von »showSmallNumbers(std::vector&lt;double, std::allocator&lt;double&gt; &gt;*&amp;)«</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1554539</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1554539</guid><dc:creator><![CDATA[petedeluxe2k]]></dc:creator><pubDate>Sun, 27 Jul 2008 13:07:05 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit templates und iteratoren on Sun, 27 Jul 2008 13:12:12 GMT]]></title><description><![CDATA[<p>Weil die Schnittstelle nicht zu der Übergabe in main() passt: Du erzeugst 'nen Vektor auf dem Heap, den du dann showSmallNumbers() übergibst, die allerdings ne Referenz auf 'nen konstanten Vektor erwartet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1554544</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1554544</guid><dc:creator><![CDATA[moagnus]]></dc:creator><pubDate>Sun, 27 Jul 2008 13:12:12 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit templates und iteratoren on Sun, 27 Jul 2008 13:47:58 GMT]]></title><description><![CDATA[<p>petedeluxe2k schrieb:</p>
<blockquote>
<pre><code class="language-cpp">vector&lt;double&gt; *v = new vector&lt;double&gt;[5];
</code></pre>
</blockquote>
<p>Die eckige Klammer sollte wohl zu einer runden Klammer werden <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/1554569</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1554569</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 27 Jul 2008 13:47:58 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit templates und iteratoren on Sun, 27 Jul 2008 13:57:28 GMT]]></title><description><![CDATA[<p>ok danke. hab in die signatur nur folgendes geschrieben<br />
(vector&lt;T&gt; *v) damit passt es vom funktionsaufruf.</p>
<p>versteh ich das richtig, dass mit der übergabe einer konstanten referenz auf ein objekt, wie z.B. mit (const vector&lt;T&gt; &amp;v) einfach ein schon bestehendes objekt übergebe?!<br />
wenn ich an einen kopierkonstruktor denk, übergeb ich ja auch eine const objekttyp &amp;o. also ein bestehende objekt.</p>
<p>in dem fall müsste ich ein objekt der klasse, welches durch den konstruktor auf dem stack erzeugt wird, übergeben?!<br />
also z.B.<br />
vector&lt;double&gt; d = vector&lt;double&gt;(5);</p>
<p>würde das gehen?</p>
<p>und warum muss das ganze, wie bei einem kopierkonstruktor const sein?</p>
<p>danke schon mal <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/1554575</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1554575</guid><dc:creator><![CDATA[petedeluxe2k]]></dc:creator><pubDate>Sun, 27 Jul 2008 13:57:28 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit templates und iteratoren on Sun, 27 Jul 2008 14:16:41 GMT]]></title><description><![CDATA[<p>Erst einmal: Den Vektor kannst du entweder auf dem Stack der main()-Funktion oder auf dem Heap der Anwendung erstellen.<br />
Das Anlegen auf dem Stack funktioniert nach dem Prinzip &quot;Typ variablenname&quot; (also bspw. &quot;int x&quot;). Wenn du dich für den Heap entscheidest, musst du den new-Operator verwenden, der einen Zeiger auf das neu erstellte Objekt zurückgibt.</p>
<p>Je nachdem, welchen Weg du oben gewählt hast, musst du jetzt deine Parameterliste und den Funktionskörper deiner Funktion anpassen.<br />
Falls du den Vektor auf dem Stack angelegt hast, kannst du das Argument an die Funktion jetzt entweder durch eine Kopie oder eben durch eine Referenz übergeben. Eine Referenz ist nichts anderes als ein Alias-Name für das übergeben Objekt innerhalb der Funktion. Mit &quot;const&quot; kannst du einen zusätzlichen Qualifizierer setzen, der festlegt, dass es sich um ein unveränderliches Objekt handelt.<br />
Möglichkeit 2: Du hast dich für die Erzeugung auf dem Heap entschieden, musst deiner Funktion also einen Zeiger auf das erstellte Objekt übergeben. Im Funktionskörper musst du jetzt auch die Zugriffe zeigertypisch anpassen.</p>
<p>Die Vorteile von Referenzen gegenüber Zeigern sollten eigentlich bekannt sein, einen will ich aber doch noch erwähnen: Mit einer Referenz auf ein konstantes Objekt hast du keine unnütze Kopie für die Funktion angefertigt, musst dich andererseits aber auch nicht mit der Zeigersyntax herumschlagen.</p>
<p>So, HTH <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/1554586</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1554586</guid><dc:creator><![CDATA[moagnus]]></dc:creator><pubDate>Sun, 27 Jul 2008 14:16:41 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit templates und iteratoren on Sun, 27 Jul 2008 14:22:45 GMT]]></title><description><![CDATA[<p>petedeluxe2k schrieb:</p>
<blockquote>
<p>versteh ich das richtig, dass mit der übergabe einer konstanten referenz auf ein objekt, wie z.B. mit (const vector&lt;T&gt; &amp;v) einfach ein schon bestehendes objekt übergebe?!</p>
</blockquote>
<p>Ja. Die Übergabe per Referenz kopiert das Objekt generell nicht, sondern übergibt es sozusagen direkt. Wenn du die Referenz konstant übergibst, kann das referenzierte Objekt von der Funktion nicht verändert werden. Was du dabei beachten musst: Bei konstanten Referenzen kann man nicht nur Variablen übergeben, in so einem Fall wird dann eine temporäre Kopie erstellt.</p>
<p>Also:</p>
<pre><code class="language-cpp">void ReferenceFunction(std::string&amp; Str);
void ConstRefFunction(const std::string&amp; Str);

int main()
{
   ReferenceFunction(&quot;Hallo&quot;);  // geht nicht, Referenz muss an Objekt gebunden sein
   ConstRefFunction(&quot;Hallo&quot;);   // geht, temporäre Kopie wird erstellt.
}
</code></pre>
<p>Somit ist es für konstante Referenzen auch möglich, Defaultparameter anzugeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1554590</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1554590</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 27 Jul 2008 14:22:45 GMT</pubDate></item></channel></rss>