<?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[Liste, abstrakte Klasse und Iteration]]></title><description><![CDATA[<p>mahlzeit,<br />
mein Problem besteht in der Erstellung von einer Liste (STL), die Objekte einer abstrakten KLasse enthält, durch die ich iterieren will, um dabei eine Methode aufzurufen.<br />
GrafischeObjekte sind dabei zum Beispiel Kreise und Linien oder Quadrate; die Methode wäre hier im Beispiel draw():</p>
<pre><code class="language-cpp">class PaintProgram
{
	private:
		list&lt;GraphicalObject*&gt; graphicalObjectList;
	public:
		void addGraphicalObject( GraphicalObject&amp; go )
		{
			graphicalObjectList.push_back( &amp;go );
		}

		void drawObjects()
		{
			list&lt;GraphicalObject*&gt;::iterator iter;
			iter = graphicalObjectList.begin();
			while(iter != graphicalObjectList.end())
				iter-&gt;draw();
		}

};
</code></pre>
<p>Nun hapert es aber am Aufruf der draw() Methode...<br />
Was mache ich da falsch, ist es ein konzeptionelles Problem oder stimmen meine Zeigerkonstruktion einfach nicht?!<br />
MfG tazz</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/167820/liste-abstrakte-klasse-und-iteration</link><generator>RSS for Node</generator><lastBuildDate>Wed, 16 Sep 2026 05:09:36 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/167820.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 15 Dec 2006 11:27:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Liste, abstrakte Klasse und Iteration on Fri, 15 Dec 2006 11:27:45 GMT]]></title><description><![CDATA[<p>mahlzeit,<br />
mein Problem besteht in der Erstellung von einer Liste (STL), die Objekte einer abstrakten KLasse enthält, durch die ich iterieren will, um dabei eine Methode aufzurufen.<br />
GrafischeObjekte sind dabei zum Beispiel Kreise und Linien oder Quadrate; die Methode wäre hier im Beispiel draw():</p>
<pre><code class="language-cpp">class PaintProgram
{
	private:
		list&lt;GraphicalObject*&gt; graphicalObjectList;
	public:
		void addGraphicalObject( GraphicalObject&amp; go )
		{
			graphicalObjectList.push_back( &amp;go );
		}

		void drawObjects()
		{
			list&lt;GraphicalObject*&gt;::iterator iter;
			iter = graphicalObjectList.begin();
			while(iter != graphicalObjectList.end())
				iter-&gt;draw();
		}

};
</code></pre>
<p>Nun hapert es aber am Aufruf der draw() Methode...<br />
Was mache ich da falsch, ist es ein konzeptionelles Problem oder stimmen meine Zeigerkonstruktion einfach nicht?!<br />
MfG tazz</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1192369</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1192369</guid><dc:creator><![CDATA[tazz]]></dc:creator><pubDate>Fri, 15 Dec 2006 11:27:45 GMT</pubDate></item><item><title><![CDATA[Reply to Liste, abstrakte Klasse und Iteration on Fri, 15 Dec 2006 11:38:02 GMT]]></title><description><![CDATA[<p>Ich tippe mal auf ein konzeptionelles Problem - du hast vergessen, den list-Iterator in der Schleife zu inkrementieren, darum wird die drawObjects() das erste Objekt deiner Liste in einer Endlosschleife immer wieder ausgeben.</p>
<p>(wenn das nicht das Problem war: Wie äußert sich das &quot;nun hapert es am Aufruf der draw() Methode&quot;?)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1192373</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1192373</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 15 Dec 2006 11:38:02 GMT</pubDate></item><item><title><![CDATA[Reply to Liste, abstrakte Klasse und Iteration on Fri, 15 Dec 2006 11:42:10 GMT]]></title><description><![CDATA[<p>Ich würde spekulieren, dass ein Zeiger generell keine Methoden hat, aber das Spekulieren habe ich mir abgewöhnt.</p>
<p>Was ist eigentlich so schwer daran, eine <strong>ordentliche</strong> Fehlerbeschreibung zu posten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1192378</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1192378</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Fri, 15 Dec 2006 11:42:10 GMT</pubDate></item><item><title><![CDATA[Reply to Liste, abstrakte Klasse und Iteration on Fri, 15 Dec 2006 11:48:19 GMT]]></title><description><![CDATA[<p>hi,<br />
ja ich geb zu, &quot;mit hapert es ein bisschen&quot; kann wohl kaum jemand was anfangen <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="😉"
    /><br />
Dass der Iterator sich nicht von allein inkrementiert ist mir noch gar nicht aufgefallen, weil ich es leider auch noch nicht geschafft habe das Programm fehlerfrei zu übersetzen.<br />
Compiler-Fehler:</p>
<blockquote>
<p>error: request for member `draw' in `<em>(&amp;iter)-&gt;std::_List_iterator&lt;_Tp&gt;::operator-&gt; [with _Tp = GraphicalObject</em>]()', which is of non-class type `GraphicalObject*'</p>
</blockquote>
<p>Wer weiß was er mir damit sagen will...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1192384</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1192384</guid><dc:creator><![CDATA[tazz]]></dc:creator><pubDate>Fri, 15 Dec 2006 11:48:19 GMT</pubDate></item><item><title><![CDATA[Reply to Liste, abstrakte Klasse und Iteration on Fri, 15 Dec 2006 11:52:50 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich gebe meine vorpostern erst mal recht.</p>
<p>Aufruf:</p>
<pre><code class="language-cpp">(*iter)-&gt;draw();
</code></pre>
<p>Dann noch ein Hinweis.. Wie benutzt du die methode ?</p>
<pre><code class="language-cpp">void addGraphicalObject( gaphicalObject&amp; go )
</code></pre>
<p>Wenn du ihr eine stack Varivable übergibst wird es gefährlich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1192387</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1192387</guid><dc:creator><![CDATA[templäd]]></dc:creator><pubDate>Fri, 15 Dec 2006 11:52:50 GMT</pubDate></item><item><title><![CDATA[Reply to Liste, abstrakte Klasse und Iteration on Fri, 15 Dec 2006 11:55:18 GMT]]></title><description><![CDATA[<p>Aha, für eine ausführliche Fehlermeldung gibt's auch ne ausführliche Hilfestellung <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>
<p>Genau wie ich vermutet habe:<br />
Der Aufruf iter-&gt;draw() bedeutet nichts anderes als (*iter).draw(). Und da Du in Deinem Vector Zeiger speicherst, ist (*iter) ein Zeiger. Ein Zeiger hat aber keine Methode draw(), sondern das worauf er zeigt hat eine Methode draw().<br />
Korrekt wäre also (**iter).draw() oder (üblicher) (*iter)-&gt;draw(). Denn das Dereferenzieren des Iterators liefert Dir ein Zeiger-auf-GraphicalObject, und das Dereferenzieren dieses Zeigers liefert Dir ein GraphicalObject, und dieses widerum hat eine Methode draw().</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1192388</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1192388</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Fri, 15 Dec 2006 11:55:18 GMT</pubDate></item><item><title><![CDATA[Reply to Liste, abstrakte Klasse und Iteration on Sun, 17 Dec 2006 13:04:06 GMT]]></title><description><![CDATA[<p>mahlzeit,<br />
tschuldigung, dass ich mich nicht mehr gemeldet habe - der erste Teil meines Wochendes war ein wenig stressig - bestand hauptsächlich aus geburtstagsparty und wohnungsumräumungen...<br />
naja ist auch egal!<br />
ich danke erstmal allen, es lag in der tat nur an diesen zwei netten klammer <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="😉"
    /><br />
@templäd:<br />
ich habe meine methode nochmal leicht geändert, weil ich von vornherein eigtl nur zeiger auf diese objekte in meiner liste speichern wollte:</p>
<pre><code class="language-cpp">void addGraphicalObject( GraphicalObject* go )
{
	graphicalObjectList.push_back( go );
}
</code></pre>
<p>also mit new erzeugen und dann übergeben!<br />
kannst du, oder jemand anders, mir trotzdem erklären, wo das Problem bestände, wenn ich Stackvariablen übergebe?!<br />
thx schon mal wieder im Voraus...<br />
noch ein schönes Wochenende</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1193393</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1193393</guid><dc:creator><![CDATA[tazz]]></dc:creator><pubDate>Sun, 17 Dec 2006 13:04:06 GMT</pubDate></item><item><title><![CDATA[Reply to Liste, abstrakte Klasse und Iteration on Mon, 18 Dec 2006 07:21:13 GMT]]></title><description><![CDATA[<p>Kurz gefasst: Ein Zeiger kann später nicht mehr überprüfen, ob er auf ein gültiges Objekt zeigt. Das heißt, wenn du so etwas hast:</p>
<pre><code class="language-cpp">void doSomething()
{
  Circle ob;
  ...
  addGraphicalObject(ob);
}// &lt;-
</code></pre>
<p>dann wird an der Position des Pfeils dein Objekt vernichtet (das gehört zu den Aufräumarbeiten am Ende einer Funktion) und der Zeiger, den du in der Objektliste gespeichert hast, zeigt auf fremde Daten. Und nur mit sehr viel Glück steht beim nächsten Aufruf von drawObjects() an dieser Adresse noch etwas, was als Grafik-Objekt erkennbar ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1193807</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1193807</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 18 Dec 2006 07:21:13 GMT</pubDate></item></channel></rss>