<?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: Eigener Iterator]]></title><description><![CDATA[<p>Hallo</p>
<p>Ich probiere gerade zur Übung ein einfaches array-Klassentemplate zu schreiben, mit eigenem Iterator. Ich habe den Ansatz gewählt, dass der Iterator eine Sub-Klasse der Array-Klasse ist. Dabei hat ein Iterator-Objekt einen pointer auf ein Array-Objekt sowie eine Position, die sagt auf welchem Element er sich befindet. Jetzt ist ein Problem in einer Methode der Array-Klasse aufgetaucht, wo der Compiler Motzt. Es handelt sich um die Methode, die ein Iterator-objekt auf das erste Array-Element zurück geben soll (die Funktion auf Zeile 89). Der Compiler meldet folgendes:</p>
<p>89 E:\Daten\devcpp\cpp test\array.h expected constructor, destructor, or type conversion before &quot;Array&quot;<br />
89 E:\Daten\devcpp\cpp test\array.h expected `;' before &quot;Array&quot;</p>
<p>Kann mir jemand sagen was ich falsch mache?</p>
<p>Gruss</p>
<pre><code class="language-cpp">#ifndef ARRAY_H
#define ARRAY_H

template &lt;class T&gt;
class Array
{
	public:

		// forward declaration
		class Iterator;
		// constructor
		Array(unsigned int size);
		// destructor		
		~Array();
		// resize array		
		void Resize(unsigned int size);	
		// access array element	
		T&amp; Access(unsigned int index);	
		// get array size	
		unsigned int Size(void);	
		// get iterator at first element	
		Iterator Start(void);

		// iterator sub-class
		class Iterator
		{
			public:
				// constructor
				Iterator();
				// destructor
				~Iterator(){}

			private:

				// pointer to array for access
				Array&lt;T&gt; *m_p_array;
				// iterator position
				unsigned int m_position;

			};

	private:

		T *m_data;
		int m_size;

	};

// array implementation
template &lt;class T&gt;
Array&lt;T&gt;::Array(unsigned int size)
{
	m_data = new T[size];
	memset(m_data, 0, size * sizeof(T));
	m_size = size;
	}

template &lt;class T&gt;
Array&lt;T&gt;::~Array()
{
	delete[](m_data);
	}

template &lt;class T&gt;
void Array&lt;T&gt;::Resize(unsigned int size)
{
	T data2 = new T[size];
	memcpy(data2, m_data, size * sizeof(T));
	m_size = size;
	delete[](m_data);
	m_data = data2;
	}

template &lt;class T&gt;	
T&amp; Array&lt;T&gt;::Access(unsigned int index)
{
	return m_data[index];
	}

template &lt;class T&gt;
unsigned int Array&lt;T&gt;::Size(void)
{
	return m_size;
	}

template &lt;class T&gt;
Array&lt;T&gt;::Iterator Array&lt;T&gt;::Start(void)
{
	Iterator iter;

	iter.m_p_array = this;
	iter.m_position = 0;

	return iter;
	}

// array::iterator implementation
template &lt;class T&gt;
Array&lt;T&gt;::Iterator::Iterator()
{
	m_position = 0;
	}

#endif
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/166261/problem-eigener-iterator</link><generator>RSS for Node</generator><lastBuildDate>Tue, 15 Sep 2026 07:34:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/166261.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 27 Nov 2006 15:46:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem: Eigener Iterator on Mon, 27 Nov 2006 15:46:58 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Ich probiere gerade zur Übung ein einfaches array-Klassentemplate zu schreiben, mit eigenem Iterator. Ich habe den Ansatz gewählt, dass der Iterator eine Sub-Klasse der Array-Klasse ist. Dabei hat ein Iterator-Objekt einen pointer auf ein Array-Objekt sowie eine Position, die sagt auf welchem Element er sich befindet. Jetzt ist ein Problem in einer Methode der Array-Klasse aufgetaucht, wo der Compiler Motzt. Es handelt sich um die Methode, die ein Iterator-objekt auf das erste Array-Element zurück geben soll (die Funktion auf Zeile 89). Der Compiler meldet folgendes:</p>
<p>89 E:\Daten\devcpp\cpp test\array.h expected constructor, destructor, or type conversion before &quot;Array&quot;<br />
89 E:\Daten\devcpp\cpp test\array.h expected `;' before &quot;Array&quot;</p>
<p>Kann mir jemand sagen was ich falsch mache?</p>
<p>Gruss</p>
<pre><code class="language-cpp">#ifndef ARRAY_H
#define ARRAY_H

template &lt;class T&gt;
class Array
{
	public:

		// forward declaration
		class Iterator;
		// constructor
		Array(unsigned int size);
		// destructor		
		~Array();
		// resize array		
		void Resize(unsigned int size);	
		// access array element	
		T&amp; Access(unsigned int index);	
		// get array size	
		unsigned int Size(void);	
		// get iterator at first element	
		Iterator Start(void);

		// iterator sub-class
		class Iterator
		{
			public:
				// constructor
				Iterator();
				// destructor
				~Iterator(){}

			private:

				// pointer to array for access
				Array&lt;T&gt; *m_p_array;
				// iterator position
				unsigned int m_position;

			};

	private:

		T *m_data;
		int m_size;

	};

// array implementation
template &lt;class T&gt;
Array&lt;T&gt;::Array(unsigned int size)
{
	m_data = new T[size];
	memset(m_data, 0, size * sizeof(T));
	m_size = size;
	}

template &lt;class T&gt;
Array&lt;T&gt;::~Array()
{
	delete[](m_data);
	}

template &lt;class T&gt;
void Array&lt;T&gt;::Resize(unsigned int size)
{
	T data2 = new T[size];
	memcpy(data2, m_data, size * sizeof(T));
	m_size = size;
	delete[](m_data);
	m_data = data2;
	}

template &lt;class T&gt;	
T&amp; Array&lt;T&gt;::Access(unsigned int index)
{
	return m_data[index];
	}

template &lt;class T&gt;
unsigned int Array&lt;T&gt;::Size(void)
{
	return m_size;
	}

template &lt;class T&gt;
Array&lt;T&gt;::Iterator Array&lt;T&gt;::Start(void)
{
	Iterator iter;

	iter.m_p_array = this;
	iter.m_position = 0;

	return iter;
	}

// array::iterator implementation
template &lt;class T&gt;
Array&lt;T&gt;::Iterator::Iterator()
{
	m_position = 0;
	}

#endif
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1182474</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1182474</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 27 Nov 2006 15:46:58 GMT</pubDate></item><item><title><![CDATA[Reply to Problem: Eigener Iterator on Mon, 27 Nov 2006 15:52:44 GMT]]></title><description><![CDATA[<p>versuch mal das Schlüsselwort &quot;typename&quot;</p>
<pre><code class="language-cpp">template &lt;class T&gt;
typename Array&lt;T&gt;::Iterator Array&lt;T&gt;::Start(void)
{
  // ...
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1182485</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1182485</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Mon, 27 Nov 2006 15:52:44 GMT</pubDate></item><item><title><![CDATA[Reply to Problem: Eigener Iterator on Mon, 27 Nov 2006 15:57:06 GMT]]></title><description><![CDATA[<p>Th schrieb:</p>
<blockquote>
<p>versuch mal das Schlüsselwort &quot;typename&quot;</p>
<pre><code class="language-cpp">template &lt;class T&gt;
typename Array&lt;T&gt;::Iterator Array&lt;T&gt;::Start(void)
{
  // ...
}
</code></pre>
</blockquote>
<p>Wirkt Wunder! Danke. <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/1182487</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1182487</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 27 Nov 2006 15:57:06 GMT</pubDate></item></channel></rss>