<?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 Iterator in Template]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich versuche gerade ein Manager-Template zu schreiben, wo man verschiedene Klasseninstanzen(pointer) speichern kann und alle eine ID bekommen. Leider will bei mir der Iterator im Template nicht funktionieren (in main() funktioniert es hingegen problemlos) und ich weiß überhaupt nicht, woran das liegt.</p>
<p>Hier der Code (Fehler siehe Zeile 39):</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;map&gt;

template&lt;class T&gt;
class Manager
{
	private:
		std::map&lt;unsigned int, T*&gt; t;
		unsigned int id;

	protected:

	public:
		Manager(){ id = 0; }
		~Manager(){ if(!t.empty()) t.clear(); }

		unsigned int Add(T* obj);
		void foobar();
		T* GetObject(const unsigned int&amp; id);
};

template&lt;class T&gt;
unsigned int Manager&lt;T&gt;::Add(T* obj)
{
	t[++id] = obj;
	return id;
}

template&lt;class T&gt;
T* Manager&lt;T&gt;::GetObject(const unsigned int&amp; id)
{
	if(t.find(id) != t.end()) return t.find(id)-&gt;second;
	else return 0;
}

template&lt;class T&gt;
void Manager&lt;T&gt;::foobar()
{
	std::map&lt;unsigned int, T*&gt;::iterator it; [b]// ERROR: expected ; before it[/b]

	for(it = t.begin(); it != t.end(); ++it)
		std::cout &lt;&lt; it-&gt;second-&gt;foobar() &lt;&lt; std::endl;
}

class Auto
{
      public:
             Auto(){}
             ~Auto(){}

             int foo(){return bar;}
             void foo(int k){bar = k;}
      private:
              int bar;
};

int main ()
{
  Auto* autoA = new Auto(); autoA-&gt;foo(12);
  Auto* autoB = new Auto(); autoB-&gt;foo(23);
  Auto* autoC = new Auto(); autoC-&gt;foo(52);

  Manager&lt;Auto&gt; m;
  m.Add(autoA);
  m.Add(autoB);
  m.Add(autoC);

  m.foobar();

  std::cin.peek();
  return 0;
}
</code></pre>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/183828/std-map-iterator-in-template</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 11:15:40 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/183828.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 09 Jun 2007 09:34:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to std::map Iterator in Template on Sat, 09 Jun 2007 09:34:42 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich versuche gerade ein Manager-Template zu schreiben, wo man verschiedene Klasseninstanzen(pointer) speichern kann und alle eine ID bekommen. Leider will bei mir der Iterator im Template nicht funktionieren (in main() funktioniert es hingegen problemlos) und ich weiß überhaupt nicht, woran das liegt.</p>
<p>Hier der Code (Fehler siehe Zeile 39):</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;map&gt;

template&lt;class T&gt;
class Manager
{
	private:
		std::map&lt;unsigned int, T*&gt; t;
		unsigned int id;

	protected:

	public:
		Manager(){ id = 0; }
		~Manager(){ if(!t.empty()) t.clear(); }

		unsigned int Add(T* obj);
		void foobar();
		T* GetObject(const unsigned int&amp; id);
};

template&lt;class T&gt;
unsigned int Manager&lt;T&gt;::Add(T* obj)
{
	t[++id] = obj;
	return id;
}

template&lt;class T&gt;
T* Manager&lt;T&gt;::GetObject(const unsigned int&amp; id)
{
	if(t.find(id) != t.end()) return t.find(id)-&gt;second;
	else return 0;
}

template&lt;class T&gt;
void Manager&lt;T&gt;::foobar()
{
	std::map&lt;unsigned int, T*&gt;::iterator it; [b]// ERROR: expected ; before it[/b]

	for(it = t.begin(); it != t.end(); ++it)
		std::cout &lt;&lt; it-&gt;second-&gt;foobar() &lt;&lt; std::endl;
}

class Auto
{
      public:
             Auto(){}
             ~Auto(){}

             int foo(){return bar;}
             void foo(int k){bar = k;}
      private:
              int bar;
};

int main ()
{
  Auto* autoA = new Auto(); autoA-&gt;foo(12);
  Auto* autoB = new Auto(); autoB-&gt;foo(23);
  Auto* autoC = new Auto(); autoC-&gt;foo(52);

  Manager&lt;Auto&gt; m;
  m.Add(autoA);
  m.Add(autoB);
  m.Add(autoC);

  m.foobar();

  std::cin.peek();
  return 0;
}
</code></pre>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1301863</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1301863</guid><dc:creator><![CDATA[Nuros]]></dc:creator><pubDate>Sat, 09 Jun 2007 09:34:42 GMT</pubDate></item><item><title><![CDATA[Reply to std::map Iterator in Template on Sat, 09 Jun 2007 09:39:52 GMT]]></title><description><![CDATA[<p>typename std::map&lt;unsigned int, T*&gt;::iterator it;</p>
<p>solle das problem loesen</p>
<p>siehe <a href="http://www.cs.wisc.edu/~driscoll/typename.html" rel="nofollow">http://www.cs.wisc.edu/~driscoll/typename.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1301865</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1301865</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Sat, 09 Jun 2007 09:39:52 GMT</pubDate></item><item><title><![CDATA[Reply to std::map Iterator in Template on Sat, 09 Jun 2007 09:42:57 GMT]]></title><description><![CDATA[<p>Danke für die schnelle Hilfe <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/1301868</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1301868</guid><dc:creator><![CDATA[Nuros]]></dc:creator><pubDate>Sat, 09 Jun 2007 09:42:57 GMT</pubDate></item></channel></rss>