<?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[std::map, std::map::iterator und templates...]]></title><description><![CDATA[<p>Hallo zusammen</p>
<p>Ich kriege momentan folgenden Code einfach nich' so zusammen, dass er kompiliert. Ich nehme an, der Fehler ist eine Folge meines mangelhaften Wissens über die Memberklasse iterator plus etwas mit Templates, aber ich kriegs gerade nicht raus.</p>
<p>Dies ist mein bisheriger, fehlerhafter Code:</p>
<pre><code class="language-cpp">template&lt;class T, class U&gt;
class wrapamap{
  class wam_value{
     U eintrag;
     bool zusatz;
     (...einige Methoden...)
  };

  public:
    void ichMachWasMitJedemEintrag();
  private:
    std::map&lt;T,wam_value&gt; MyMap;
};

template&lt;class T, class U&gt;
void wrapamap&lt;T,U&gt;::ichMachWasMitJedemEintrag()
{
   typename std::map&lt;T,wam_value&gt;::iterator walkABit; //dies krieg ich nich so hin, damit

   for( walkABit=MyMap.begin(); walkABit!=MyMap.end(); walkABit++ ) // diese zuweisung und der vergleich funktionieren
   {
      ...
   }
}
</code></pre>
<p>Ich krieg die definition des iterators nich richtig hin, kann wer helfen?</p>
<p>Merci!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/280585/std-map-std-map-iterator-und-templates</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 01:58:19 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/280585.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 18 Jan 2011 03:12:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to std::map, std::map::iterator und templates... on Tue, 18 Jan 2011 03:12:38 GMT]]></title><description><![CDATA[<p>Hallo zusammen</p>
<p>Ich kriege momentan folgenden Code einfach nich' so zusammen, dass er kompiliert. Ich nehme an, der Fehler ist eine Folge meines mangelhaften Wissens über die Memberklasse iterator plus etwas mit Templates, aber ich kriegs gerade nicht raus.</p>
<p>Dies ist mein bisheriger, fehlerhafter Code:</p>
<pre><code class="language-cpp">template&lt;class T, class U&gt;
class wrapamap{
  class wam_value{
     U eintrag;
     bool zusatz;
     (...einige Methoden...)
  };

  public:
    void ichMachWasMitJedemEintrag();
  private:
    std::map&lt;T,wam_value&gt; MyMap;
};

template&lt;class T, class U&gt;
void wrapamap&lt;T,U&gt;::ichMachWasMitJedemEintrag()
{
   typename std::map&lt;T,wam_value&gt;::iterator walkABit; //dies krieg ich nich so hin, damit

   for( walkABit=MyMap.begin(); walkABit!=MyMap.end(); walkABit++ ) // diese zuweisung und der vergleich funktionieren
   {
      ...
   }
}
</code></pre>
<p>Ich krieg die definition des iterators nich richtig hin, kann wer helfen?</p>
<p>Merci!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2008101</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2008101</guid><dc:creator><![CDATA[hannahmontana]]></dc:creator><pubDate>Tue, 18 Jan 2011 03:12:38 GMT</pubDate></item><item><title><![CDATA[Reply to std::map, std::map::iterator und templates... on Tue, 18 Jan 2011 06:27:27 GMT]]></title><description><![CDATA[<p>Hallo hannahmontana!</p>
<p>Ich vermute du willst sowas:</p>
<pre><code class="language-cpp">template&lt;class T, class U&gt; 
class wrapamap{ 
	class wam_value{ 
		U eintrag; 
		bool zusatz; 
	}; 

public: 
    void ichMachWasMitJedemEintrag(); 
private: 
    std::map&lt;T,wam_value&gt; MyMap; 
}; 

template&lt;class T, class U&gt; 
void wrapamap&lt;T,U&gt;::ichMachWasMitJedemEintrag() 
{ 
	typedef typename std::map&lt;T, typename wrapamap&lt;T,U&gt;::wam_value&gt;::iterator walkABit; //dies krieg ich nich so hin, damit 

	for(walkABit it=MyMap.begin(); it!=MyMap.end(); it++ ) // diese zuweisung und der vergleich funktionieren 
	{ 
	//	... 
	} 
}
</code></pre>
<p>bzw. schöner:</p>
<pre><code class="language-cpp">template&lt;class T, class U&gt; 
class wrapamap{ 
	class wam_value{ 
		U eintrag; 
		bool zusatz; 
	}; 

public: 
    void ichMachWasMitJedemEintrag();
	typedef std::map&lt;T,wam_value&gt; map_type;

private: 
    map_type MyMap;
}; 

template&lt;class T, class U&gt; 
void wrapamap&lt;T,U&gt;::ichMachWasMitJedemEintrag() 
{ 
	typedef typename wrapamap&lt;T,U&gt;::map_type::iterator walkABit; //dies krieg ich nich so hin, damit 

	for(walkABit it=MyMap.begin(); it!=MyMap.end(); it++ ) // diese zuweisung und der vergleich funktionieren 
	{ 
	//	... 
	} 
}
</code></pre>
<p>Gruß,<br />
XSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2008109</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2008109</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Tue, 18 Jan 2011 06:27:27 GMT</pubDate></item><item><title><![CDATA[Reply to std::map, std::map::iterator und templates... on Tue, 18 Jan 2011 07:24:24 GMT]]></title><description><![CDATA[<p>XSpille schrieb:</p>
<blockquote>
<p>bzw. schöner:</p>
</blockquote>
<p>oder auch schön</p>
<pre><code class="language-cpp">template&lt;class T, class U&gt;
class wrapamap{
    struct wam_value{
        U eintrag;
        bool zusatz;
    };

public:
    typedef std::map&lt;T,wam_value&gt; MyMap;
    static void ZusatzAnzeigen(typename MyMap::const_reference r)
    {
        std::cout &lt;&lt; r.second.zusatz &lt;&lt; &quot;\n&quot;;
    }

    template&lt;typename Func&gt;
    void ichMachWasMitJedemEintrag(Func wasDenn)
    {
        std::for_each(map_.begin(), map_.end(), wasDenn);
    }

private:
     MyMap map_;
}; 

int main()
{
    typedef wrapamap&lt;int, int&gt; wrap;
    wrap m;
    m.ichMachWasMitJedemEintrag(wrap::ZusatzAnzeigen);
    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2008119</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2008119</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Tue, 18 Jan 2011 07:24:24 GMT</pubDate></item><item><title><![CDATA[Reply to std::map, std::map::iterator und templates... on Tue, 18 Jan 2011 12:59:24 GMT]]></title><description><![CDATA[<p>Hallo zusammen, danke für die bisherigen Antworten, die bringen mich allerdings nicht weiter.<br />
Ich hab' gerade gemerkt, dass ich den entscheidenden Punkt gestern Nacht beim Abschreiben des Codes vergessen hab': Die Funktion ist const.<br />
(In der oben geposteten Version funktionierts). Wegen des const krieg ich ein &quot;no match for 'operator=', komm ich da irgendwie von weg(und wie?) oder funktioniert der iterator member type nicht auf konstanten objekten? ich hab leider nichts gefunden wie der map::iterator in der stl umgesetzt ist.</p>
<p>editierter code:</p>
<pre><code class="language-cpp">template&lt;class T, class U&gt;
class wrapamap{
  class wam_value{
     U eintrag;
     bool zusatz;
     (...einige Methoden...)
  };

  public:
    void ichMachWasMitJedemEintrag() const;
  private:
    std::map&lt;T,wam_value&gt; MyMap;
};

template&lt;class T, class U&gt;
void wrapamap&lt;T,U&gt;::ichMachWasMitJedemEintrag() const
{
   typename std::map&lt;T,wam_value&gt;::iterator walkABit; //dies krieg ich nich so hin, damit

   for( walkABit=MyMap.begin(); walkABit!=MyMap.end(); walkABit++ ) // diese zuweisung und der vergleich funktionieren
   {
      ...
   }
}
</code></pre>
<p>Merci!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2008249</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2008249</guid><dc:creator><![CDATA[hannahmontana]]></dc:creator><pubDate>Tue, 18 Jan 2011 12:59:24 GMT</pubDate></item><item><title><![CDATA[Reply to std::map, std::map::iterator und templates... on Tue, 18 Jan 2011 13:30:28 GMT]]></title><description><![CDATA[<p>Du kannst auf member-Variablen (ohne const_cast) keine verändernden Operationen<br />
durchführen.</p>
<p>Der iterator erlaubt aber eine Veränderung der Elemente in der map.<br />
Wenn du stattdessen const_iterator verwendest, sind diese nicht möglich.<br />
Beim Dereferenzieren des const_iterators kriegst du dann natürlich ein const Objekt zurück.</p>
<p>EDIT: Wenn ich heute morgen schon wach gewesen wäre, hätte mir auffallen sollen,<br />
dass dein Code funktioniert <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2008264</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2008264</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Tue, 18 Jan 2011 13:30:28 GMT</pubDate></item><item><title><![CDATA[Reply to std::map, std::map::iterator und templates... on Tue, 18 Jan 2011 14:00:05 GMT]]></title><description><![CDATA[<p>XSpille schrieb:</p>
<blockquote>
<p>Du kannst auf member-Variablen (ohne const_cast) keine verändernden Operationen<br />
durchführen.</p>
<p>Der iterator erlaubt aber eine Veränderung der Elemente in der map.<br />
Wenn du stattdessen const_iterator verwendest, sind diese nicht möglich.<br />
Beim Dereferenzieren des const_iterators kriegst du dann natürlich ein const Objekt zurück.</p>
<p>EDIT: Wenn ich heute morgen schon wach gewesen wäre, hätte mir auffallen sollen,<br />
dass dein Code funktioniert <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
</blockquote>
<p>Yes, merci vielmals! Ich hab den const_iterator nich gekannt und gehofft, dass iterator eine const-Überladung beinhaltet. Mit const_iterator funktionierts perfekt!</p>
<p>Aus reinem Interesse: Wo hätte ich einen const_cast anbringen müssen, um das Ganze ohne const_iterator zum laufen zu bringen? Ich hab dahingehend einiges versucht...</p>
<p>Gruss</p>
<p>Btw. Ging mir ähnlich als ich den ersten Beitrag geschrieben hab <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/2008280</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2008280</guid><dc:creator><![CDATA[hannahmontana]]></dc:creator><pubDate>Tue, 18 Jan 2011 14:00:05 GMT</pubDate></item><item><title><![CDATA[Reply to std::map, std::map::iterator und templates... on Tue, 18 Jan 2011 14:34:24 GMT]]></title><description><![CDATA[<p>hannahmontana schrieb:</p>
<blockquote>
<p>Wo hätte ich einen const_cast anbringen müssen, um das Ganze ohne const_iterator zum laufen zu bringen?</p>
</blockquote>
<p>Ungetestet (Hab gerade keinen Compiler hier):</p>
<pre><code class="language-cpp">template&lt;class T, class U&gt;
void wrapamap&lt;T,U&gt;::ichMachWasMitJedemEintrag() const
{
   // Ich bin mir nicht sicher, ob du vor dem wam_value das &quot;typename wrapamap&lt;T,U&gt;::&quot; brauchst
   // typename std::map&lt;T, wam_value&gt;&amp; MyMap2(const_cast&lt;typename std::map&lt;T, wam_value&gt;&amp; &gt;(MyMap));
   typename std::map&lt;T,typename wrapamap&lt;T,U&gt;::wam_value&gt;&amp; MyMap2(const_cast&lt;typename std::map&lt;T,typename wrapamap&lt;T,U&gt;::wam_value&gt;&amp; &gt;(MyMap));
   typename std::map&lt;T,wam_value&gt;::iterator walkABit; //dies krieg ich nich so hin, damit

   for( walkABit=MyMap2.begin(); walkABit!=MyMap2.end(); walkABit++ ) // diese zuweisung und der vergleich funktionieren
   {
      ...
   }
}
</code></pre>
<p>Aber meistens deutet ein const_cast auf einen Fehler in deinem Programm-Design<br />
hin.</p>
<p>EDIT: Du kannst natürlich auch this casten, nur dann macht das const wohl<br />
gar keinen Sinn mehr <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>EDIT2: Je länger ich drüber nachdenke, glaub ich, du brauchst das &quot;typename wrapamap&lt;T,U&gt;::&quot;</p>
<p>EDIT3: Ja, du brauchst es <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /> (Immernoch ungetestet)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2008301</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2008301</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Tue, 18 Jan 2011 14:34:24 GMT</pubDate></item><item><title><![CDATA[Reply to std::map, std::map::iterator und templates... on Tue, 18 Jan 2011 14:45:25 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">std::map&lt;...&gt;::iterator it = const_cast&lt;std::map&lt;...&gt;&amp;&gt;(MyMap).begin();
</code></pre>
<p>Der bessere Weg wäre aber MyMap mutable zu machen.</p>
<pre><code class="language-cpp">class mapwrap
{
  //...
  mutable MapType MyMap;
};
</code></pre>
<p>Damit kannst du MyMap auch in konstanten Methoden verändern. Sowas kann auch durchaus Sinn machen, wenn durch Aufrufen der Methode das Objekt nicht logisch verändert wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2008313</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2008313</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Tue, 18 Jan 2011 14:45:25 GMT</pubDate></item><item><title><![CDATA[Reply to std::map, std::map::iterator und templates... on Tue, 18 Jan 2011 15:06:55 GMT]]></title><description><![CDATA[<p>XSpille schrieb:</p>
<blockquote>
<p>EDIT2: Je länger ich drüber nachdenke, glaub ich, du brauchst das &quot;typename wrapamap&lt;T,U&gt;::&quot;</p>
<p>EDIT3: Ja, du brauchst es <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /> (Immernoch ungetestet)</p>
</blockquote>
<p>Ich hab das kurz ausprobiert mit gcc, Resultat: Man braucht es nicht! <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>Dies:</p>
<p>XSpille schrieb:</p>
<blockquote>
<p>Ungetestet (Hab gerade keinen Compiler hier):</p>
<pre><code class="language-cpp">typename std::map&lt;T, wam_value&gt;&amp; MyMap2(const_cast&lt;typename std::map&lt;T, wam_value&gt;&amp; &gt;(MyMap));
</code></pre>
</blockquote>
<p>Funktioniert ohne Probleme. Wohl gleicher namespace?</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9203">@brotbernd</a>: Merci für den Input. Da muss man dann aber langsam schon extrem aufpassen nichts durcheinander zu kriegen.. Aber für das Zwischenspeichern von aufwändig berechneten, wiederverwendbaren Resultaten natürlich sehr hilfreich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2008323</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2008323</guid><dc:creator><![CDATA[hannahmontana]]></dc:creator><pubDate>Tue, 18 Jan 2011 15:06:55 GMT</pubDate></item><item><title><![CDATA[Reply to std::map, std::map::iterator und templates... on Tue, 18 Jan 2011 15:12:17 GMT]]></title><description><![CDATA[<p>hannahmontana schrieb:</p>
<blockquote>
<p>XSpille schrieb:</p>
<blockquote>
<p>EDIT2: Je länger ich drüber nachdenke, glaub ich, du brauchst das &quot;typename wrapamap&lt;T,U&gt;::&quot;</p>
<p>EDIT3: Ja, du brauchst es <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /> (Immernoch ungetestet)</p>
</blockquote>
<p>Ich hab das kurz ausprobiert mit gcc, Resultat: Man braucht es nicht! <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>
</blockquote>
<p>Ich brauch es wohl, da ich es sonst nicht verstehe :p</p>
<p>Danke, dass du es kurz getestet hast und das Ergebnis auch postet <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/2008326</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2008326</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Tue, 18 Jan 2011 15:12:17 GMT</pubDate></item><item><title><![CDATA[Reply to std::map, std::map::iterator und templates... on Tue, 18 Jan 2011 16:11:18 GMT]]></title><description><![CDATA[<p>Das Schlüsselwort <code>typename</code> benötigst du nur bei abhängigen Namen. Das wäre zum Beispiel (angenommen, mindestens ein Typ von <code>Key</code> und <code>Value</code> ist ein Templateparameter):</p>
<pre><code class="language-cpp">typename std::map&lt;Key, Value&gt;::iterator
</code></pre>
<p>nicht aber:</p>
<pre><code class="language-cpp">std::map&lt;Key, Value&gt;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2008349</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2008349</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 18 Jan 2011 16:11:18 GMT</pubDate></item></channel></rss>