<?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[Virtuelle Klasse in Liste]]></title><description><![CDATA[<p>Hi Community!</p>
<p>Ich habe eine Oberklasse A, bei der ich ein paar Methoden rein virutell gemacht habe (virtual void met() = 0;) und andere definiert habe.<br />
Des Weiteren habe ich zwei Klassen B1 und B2 die von A erben. Dort werden auch die virtuellen Methoden überschrieben (und somit definiert).</p>
<p>Jetzt möchte ich in einer Liste (list a) Instanzen der Objekte B1 und B2 speichern und anschließend die Methode met() aufrufen.<br />
Wenn ich</p>
<pre><code class="language-cpp">list&lt;A&gt; a;
</code></pre>
<p>mache, dann sagt g++:</p>
<blockquote>
<p>[...] error: cannot declare field `std::_List_node&lt;GraphicObj&gt;::_M_data' to be of type `A'<br />
[...]: error: because the following virtual functions are abstract:<br />
[...]</p>
</blockquote>
<p>Wie geht es also sonst? Wie kann ich B1 und B2 in eine Liste speichern? Oder müsste das so gehen und ich mach was anderes falsch?</p>
<p>Danke für alle Anregungen.<br />
Konstantin</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/129234/virtuelle-klasse-in-liste</link><generator>RSS for Node</generator><lastBuildDate>Wed, 26 Aug 2026 04:22:55 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/129234.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 11 Dec 2005 18:37:26 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Virtuelle Klasse in Liste on Sun, 11 Dec 2005 18:37:26 GMT]]></title><description><![CDATA[<p>Hi Community!</p>
<p>Ich habe eine Oberklasse A, bei der ich ein paar Methoden rein virutell gemacht habe (virtual void met() = 0;) und andere definiert habe.<br />
Des Weiteren habe ich zwei Klassen B1 und B2 die von A erben. Dort werden auch die virtuellen Methoden überschrieben (und somit definiert).</p>
<p>Jetzt möchte ich in einer Liste (list a) Instanzen der Objekte B1 und B2 speichern und anschließend die Methode met() aufrufen.<br />
Wenn ich</p>
<pre><code class="language-cpp">list&lt;A&gt; a;
</code></pre>
<p>mache, dann sagt g++:</p>
<blockquote>
<p>[...] error: cannot declare field `std::_List_node&lt;GraphicObj&gt;::_M_data' to be of type `A'<br />
[...]: error: because the following virtual functions are abstract:<br />
[...]</p>
</blockquote>
<p>Wie geht es also sonst? Wie kann ich B1 und B2 in eine Liste speichern? Oder müsste das so gehen und ich mach was anderes falsch?</p>
<p>Danke für alle Anregungen.<br />
Konstantin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/939743</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/939743</guid><dc:creator><![CDATA[Konstantin]]></dc:creator><pubDate>Sun, 11 Dec 2005 18:37:26 GMT</pubDate></item><item><title><![CDATA[Reply to Virtuelle Klasse in Liste on Sun, 11 Dec 2005 18:55:43 GMT]]></title><description><![CDATA[<p>Musst Zeiger benutzen.</p>
<pre><code class="language-cpp">list&lt;A *&gt; a;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/939753</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/939753</guid><dc:creator><![CDATA[Spezi L]]></dc:creator><pubDate>Sun, 11 Dec 2005 18:55:43 GMT</pubDate></item><item><title><![CDATA[Reply to Virtuelle Klasse in Liste on Sun, 11 Dec 2005 19:03:31 GMT]]></title><description><![CDATA[<p>OK, danke, und wie benutze ich dann push_back?</p>
<pre><code class="language-cpp">a.push_back(b1)
</code></pre>
<p>geht ja wohl nicht.</p>
<p>Würd ja sagen:</p>
<pre><code class="language-cpp">a.push_back(&amp;b1)
</code></pre>
<p>Ich versteh diese Pointerdinger einfach nicht. Könnt ihr mir kurz auf die Sprünge helfen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/939759</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/939759</guid><dc:creator><![CDATA[Konstantin]]></dc:creator><pubDate>Sun, 11 Dec 2005 19:03:31 GMT</pubDate></item><item><title><![CDATA[Reply to Virtuelle Klasse in Liste on Sun, 11 Dec 2005 19:16:28 GMT]]></title><description><![CDATA[<p>Konstantin schrieb:</p>
<blockquote>
<pre><code class="language-cpp">a.push_back(&amp;b1)
</code></pre>
<p>Ich versteh diese Pointerdinger einfach nicht. Könnt ihr mir kurz auf die Sprünge helfen?</p>
</blockquote>
<p>Prinzipiell ist das richtig. funktioniert aber nur solange b1 nicht ungültig wird.<br />
normalerweise würde man sowas machen.</p>
<pre><code class="language-cpp">a.push_back(new b( irgendwas ));
</code></pre>
<p>Dann musst du natürlich die Objecte irgendwann wieder freigeben.<br />
Kurt</p>
<p>EDIT: sehe gerade dein vektor ist eine membervariable. dann kannst du davon ausgehen dass du die elemente mit new anlegen musst. Fürs Freigeben bietet sich dann der dtor an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/939766</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/939766</guid><dc:creator><![CDATA[ZuK]]></dc:creator><pubDate>Sun, 11 Dec 2005 19:16:28 GMT</pubDate></item><item><title><![CDATA[Reply to Virtuelle Klasse in Liste on Sun, 11 Dec 2005 19:34:15 GMT]]></title><description><![CDATA[<p>Also, um das noch mal klarzustellen:</p>
<pre><code class="language-cpp">public A
{
   public:
   A()
   {}

   void abc()
   {
      // hier tu ich was
   }

   void met()=0;
};
</code></pre>
<pre><code class="language-cpp">public B1 : public A
{
   public:
   B1()
   {
   }

   void met()
   {
      // hier passiert was
   }
};
</code></pre>
<pre><code class="language-cpp">public B2 : public A
{
   public:
   B1()
   {
   }

   void met()
   {
      // hier passiert was
   }
};
</code></pre>
<p>In der main:</p>
<pre><code class="language-cpp">list&lt;A*&gt; a;
B1 b1();
B2 b2();
</code></pre>
<p>Wie füge ich jetzt b1 und b2 zu der Liste hinzu, so dass ich hinterher für jedes Objekt in der Liste .met() ausführen kann?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/939782</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/939782</guid><dc:creator><![CDATA[Konstantin]]></dc:creator><pubDate>Sun, 11 Dec 2005 19:34:15 GMT</pubDate></item><item><title><![CDATA[Reply to Virtuelle Klasse in Liste on Sun, 11 Dec 2005 19:41:03 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">list&lt;A*&gt; a;
a.push_back(new B1);
a.push_back(new B2);
for( list&lt;A*&gt;::iterator i = a.begin(); i != a.end(); ++i )
   (*i)-&gt;met();
for( list&lt;A*&gt;::iterator i = a.begin(); i != a.end(); ++i )
   delete (*i);
</code></pre>
<p>Kurt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/939785</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/939785</guid><dc:creator><![CDATA[ZuK]]></dc:creator><pubDate>Sun, 11 Dec 2005 19:41:03 GMT</pubDate></item><item><title><![CDATA[Reply to Virtuelle Klasse in Liste on Sun, 11 Dec 2005 19:45:26 GMT]]></title><description><![CDATA[<p>Oh ja ... es funktioniert. Ich hatte noch nen Fehler in einer anderen Zeile. Hatte da die Zeilen verwechselt.</p>
<p>Danke dir.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/939791</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/939791</guid><dc:creator><![CDATA[Konstantin]]></dc:creator><pubDate>Sun, 11 Dec 2005 19:45:26 GMT</pubDate></item><item><title><![CDATA[Reply to Virtuelle Klasse in Liste on Sun, 11 Dec 2005 19:46:39 GMT]]></title><description><![CDATA[<p>Und nicht vergessen, den Dtor der Basis-Klasse dann virtual zu machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/939792</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/939792</guid><dc:creator><![CDATA[C Newbie]]></dc:creator><pubDate>Sun, 11 Dec 2005 19:46:39 GMT</pubDate></item><item><title><![CDATA[Reply to Virtuelle Klasse in Liste on Sun, 11 Dec 2005 19:56:06 GMT]]></title><description><![CDATA[<p>C Newbie schrieb:</p>
<blockquote>
<p>Und nicht vergessen, den Dtor der Basis-Klasse dann virtual zu machen.</p>
</blockquote>
<p>Den was? Was muss ich machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/939801</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/939801</guid><dc:creator><![CDATA[Konstantin]]></dc:creator><pubDate>Sun, 11 Dec 2005 19:56:06 GMT</pubDate></item><item><title><![CDATA[Reply to Virtuelle Klasse in Liste on Sun, 11 Dec 2005 20:03:23 GMT]]></title><description><![CDATA[<p>hi,</p>
<p>du musst den Destruktor der Basisklasse virtual machen, damit die Destruktoren der abgeleiteten Klassen aufgerufen werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/939811</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/939811</guid><dc:creator><![CDATA[bluecode]]></dc:creator><pubDate>Sun, 11 Dec 2005 20:03:23 GMT</pubDate></item></channel></rss>