<?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 bei vererbung &#x2F; abstraktem zeugs]]></title><description><![CDATA[<pre><code class="language-cpp">template&lt;class t&gt;
class foo
{
  public:
    virtual void f(const t&amp; src) = 0;
};

class foo2 : virtual public foo&lt;char*&gt;
{
  public:
    void f(const char*&amp; src){};
};

int main()
{
  foo2 g;
};
</code></pre>
<p>da bekomme ich folgende fehlermeldung, mit der ich nicht wirklich was anzufangen weiß, weil ich den fehler nicht sehe.</p>
<pre><code>error C2259: 'foo2' : cannot instantiate abstract class
        due to following members:
        'void foo&lt;t&gt;::f(const t &amp;)' : is abstract
        with
        [
            t=char *
        ]
see declaration of 'foo&lt;t&gt;::f'
        with
        [
            t=char *
        ]
</code></pre>
<p>vielleicht kann mir jemand helfen, schonmal danke im voraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/183494/problem-bei-vererbung-abstraktem-zeugs</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 06:23:09 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/183494.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 05 Jun 2007 14:21:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to problem bei vererbung &#x2F; abstraktem zeugs on Tue, 05 Jun 2007 14:22:13 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">template&lt;class t&gt;
class foo
{
  public:
    virtual void f(const t&amp; src) = 0;
};

class foo2 : virtual public foo&lt;char*&gt;
{
  public:
    void f(const char*&amp; src){};
};

int main()
{
  foo2 g;
};
</code></pre>
<p>da bekomme ich folgende fehlermeldung, mit der ich nicht wirklich was anzufangen weiß, weil ich den fehler nicht sehe.</p>
<pre><code>error C2259: 'foo2' : cannot instantiate abstract class
        due to following members:
        'void foo&lt;t&gt;::f(const t &amp;)' : is abstract
        with
        [
            t=char *
        ]
see declaration of 'foo&lt;t&gt;::f'
        with
        [
            t=char *
        ]
</code></pre>
<p>vielleicht kann mir jemand helfen, schonmal danke im voraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1299359</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1299359</guid><dc:creator><![CDATA[StarCraftFeuerteufel]]></dc:creator><pubDate>Tue, 05 Jun 2007 14:22:13 GMT</pubDate></item><item><title><![CDATA[Reply to problem bei vererbung &#x2F; abstraktem zeugs on Tue, 05 Jun 2007 14:31:18 GMT]]></title><description><![CDATA[<p>die funktionssignatur erwähnt ein virtual <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>
<pre><code class="language-cpp">template &lt;typename T&gt;
class foo_base
{
public:
	virtual void func(T const&amp; par) = 0;
};

class foo : public foo_base&lt;int&gt;
{
public:
	virtual void func(int const&amp; par)
	{ }
};
</code></pre>
<p>solltest keine virtual ableitung verwenden, es sei denn es ist absolut notwendig (zb diamanten vererbung)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1299366</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1299366</guid><dc:creator><![CDATA[inp]]></dc:creator><pubDate>Tue, 05 Jun 2007 14:31:18 GMT</pubDate></item><item><title><![CDATA[Reply to problem bei vererbung &#x2F; abstraktem zeugs on Tue, 05 Jun 2007 14:35:35 GMT]]></title><description><![CDATA[<p>inp schrieb:</p>
<blockquote>
<p>die funktionssignatur erwähnt ein virtual <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>
<pre><code class="language-cpp">template &lt;typename T&gt;
class foo_base
{
public:
	virtual void func(T const&amp; par) = 0;
};

class foo : public foo_base&lt;int&gt;
{
public:
	virtual void func(int const&amp; par)
	{ }
};
</code></pre>
</blockquote>
<p>Ich würde mal sagen, das bringt absolut rein gar nichts.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1299369</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1299369</guid><dc:creator><![CDATA[Helium]]></dc:creator><pubDate>Tue, 05 Jun 2007 14:35:35 GMT</pubDate></item><item><title><![CDATA[Reply to problem bei vererbung &#x2F; abstraktem zeugs on Tue, 05 Jun 2007 14:34:27 GMT]]></title><description><![CDATA[<p>a) was ist diamanten vererbung?<br />
b) warum muss man das virtual da mitschleifen, denn bei</p>
<pre><code class="language-cpp">class foo3 : virtual public foo&lt;int&gt;
{
  public:
    void f(const int&amp; src){};
};

int main()
{
  foo3 g;
  return 0;
};
</code></pre>
<p>meckert er nicht rum.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1299370</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1299370</guid><dc:creator><![CDATA[StarCraftFeuerteufel]]></dc:creator><pubDate>Tue, 05 Jun 2007 14:34:27 GMT</pubDate></item><item><title><![CDATA[Reply to problem bei vererbung &#x2F; abstraktem zeugs on Tue, 05 Jun 2007 14:38:29 GMT]]></title><description><![CDATA[<p>Das virtual in der Funktionssignatur ist nicht das Problem sondern eher die Position des const in der Parameterliste.<br />
Warum weiß ich aber auch nicht.<br />
Das hier geht</p>
<pre><code class="language-cpp">template&lt;class t&gt;
class footest
{
  public:
    virtual void f(t const&amp; src) = 0;
};

class footest2 : public footest&lt;char*&gt;
{
  public:
    void f(char* const&amp; src){};
};
</code></pre>
<p>Das hier nicht</p>
<pre><code class="language-cpp">template&lt;class t&gt;
class footest
{
  public:
    virtual void f(const t&amp; src) = 0;
};

class footest2 : public footest&lt;char*&gt;
{
  public:
    void f(const char*&amp; src){};
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1299374</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1299374</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 05 Jun 2007 14:38:29 GMT</pubDate></item><item><title><![CDATA[Reply to problem bei vererbung &#x2F; abstraktem zeugs on Tue, 05 Jun 2007 14:37:52 GMT]]></title><description><![CDATA[<p>b) muss man nicht?! Hmm scheint nicht direkt über &quot;char*&quot; zu gehen ... wenn du keinen Pointer nimmst, geht es.</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
class foo
{
public:
	virtual void f(const T&amp;) = 0;
};

class bar : public foo&lt;char&gt;
{
public:
	void f(const char&amp;)
	{}
};
int main()
{
	bar g;
}
</code></pre>
<p>...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1299376</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1299376</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Tue, 05 Jun 2007 14:37:52 GMT</pubDate></item><item><title><![CDATA[Reply to problem bei vererbung &#x2F; abstraktem zeugs on Tue, 05 Jun 2007 14:40:00 GMT]]></title><description><![CDATA[<p>FreakyBKA schrieb:</p>
<blockquote>
<p>a) was ist diamanten vererbung?</p>
</blockquote>
<p>Er meint eine Diamantstruktur in deiner Hierarchie:</p>
<p>B und C erben beide von A, D erbt sowohl von B, als auch von C. D erbt indirekt zweimal von A. hier ist virtual nötig.</p>
<blockquote>
<p>b) warum muss man das virtual da mitschleifen, denn bei</p>
</blockquote>
<p>Muss man nicht, ist bullshit.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1299377</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1299377</guid><dc:creator><![CDATA[Helium]]></dc:creator><pubDate>Tue, 05 Jun 2007 14:40:00 GMT</pubDate></item><item><title><![CDATA[Reply to problem bei vererbung &#x2F; abstraktem zeugs on Tue, 05 Jun 2007 14:40:44 GMT]]></title><description><![CDATA[<p>hab nochmal bissl rumprobiert, der scheint generell damit probleme zu haben wenn man pointer nimmt, also foo&lt;TYPE*&gt;.<br />
warum genau geht das mit pointern nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1299379</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1299379</guid><dc:creator><![CDATA[StarCraftFeuerteufel]]></dc:creator><pubDate>Tue, 05 Jun 2007 14:40:44 GMT</pubDate></item><item><title><![CDATA[Reply to problem bei vererbung &#x2F; abstraktem zeugs on Tue, 05 Jun 2007 14:41:15 GMT]]></title><description><![CDATA[<p>FreakyBKA schrieb:</p>
<blockquote>
<p>hab nochmal bissl rumprobiert, der scheint generell damit probleme zu haben wenn man pointer nimmt, also foo&lt;TYPE*&gt;.</p>
</blockquote>
<p>Nein. Du machst</p>
<p>&quot;const Type * &amp;&quot; was flasch ist</p>
<p>richtig wäre</p>
<p>&quot;Type * const &amp;&quot;</p>
<p>Also konkret:</p>
<pre><code class="language-cpp">void f(char* const &amp; src){}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1299380</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1299380</guid><dc:creator><![CDATA[Helium]]></dc:creator><pubDate>Tue, 05 Jun 2007 14:41:15 GMT</pubDate></item><item><title><![CDATA[Reply to problem bei vererbung &#x2F; abstraktem zeugs on Tue, 05 Jun 2007 14:50:07 GMT]]></title><description><![CDATA[<p>das ist mir ja ganz neu, dass man das so schreibt :-o<br />
diese schreibweise hab ich bis jetzt noch nirgends gesehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1299386</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1299386</guid><dc:creator><![CDATA[StarCraftFeuerteufel]]></dc:creator><pubDate>Tue, 05 Jun 2007 14:50:07 GMT</pubDate></item><item><title><![CDATA[Reply to problem bei vererbung &#x2F; abstraktem zeugs on Tue, 05 Jun 2007 14:51:22 GMT]]></title><description><![CDATA[<p>FreakyBKA schrieb:</p>
<blockquote>
<p>das ist mir ja ganz neu, dass man das so schreibt :-o</p>
</blockquote>
<p>&quot;const Foo *&quot; ist das selbe, wie &quot;Foo const *&quot; Also ein veränderbarer Zeiger auf ein konstantes Foo.<br />
&quot;Foo * const&quot; ist aber ein konstanter Zeiger auf ein veränderbares Foo.</p>
<p>Wenn du also von &quot;foo&lt;const char *&gt;&quot; ableiten würdest, müsstest du &quot;const char * const &amp;&quot; in deiner Funktion verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1299388</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1299388</guid><dc:creator><![CDATA[Helium]]></dc:creator><pubDate>Tue, 05 Jun 2007 14:51:22 GMT</pubDate></item><item><title><![CDATA[Reply to problem bei vererbung &#x2F; abstraktem zeugs on Tue, 05 Jun 2007 14:51:10 GMT]]></title><description><![CDATA[<p>a)diamantenvererbung</p>
<pre><code class="language-cpp">class base
{
 int member;
};

class left : public base
{
};

class right : public base
{
};

class top : public left, public right
{
 void f()
 { 
  member = 10; //ambiguity, welches member ? left::member ? right::member ?
  left::member = 10; //ok
  right::member = 10; //ok
 }
}

class top2 : virtual public left, public right
{
 void f()
 {
  member = 10; //ok, virtual public left erzwingt das left::member das einzige existente member ist.
 }
}
</code></pre>
<p>im prinzip der klassische fall von diamanten vererbung<br />
top benötigt im prinzip nur eine kopie von &quot;base&quot; hat aber 2<br />
top2 löst as mit virtual vererbung.</p>
<ol start="2">
<li>hast recht (schleifs immer mit, gewohnheit..hehe)</li>
</ol>
]]></description><link>https://www.c-plusplus.net/forum/post/1299392</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1299392</guid><dc:creator><![CDATA[inp]]></dc:creator><pubDate>Tue, 05 Jun 2007 14:51:10 GMT</pubDate></item><item><title><![CDATA[Reply to problem bei vererbung &#x2F; abstraktem zeugs on Tue, 05 Jun 2007 14:59:04 GMT]]></title><description><![CDATA[<p>diamantvererbung ist mir schon klar, kannte den begriff dafür nur nicht.<br />
das mit den * const&amp; hab ich jetzt glaub ich verstanden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1299397</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1299397</guid><dc:creator><![CDATA[StarCraftFeuerteufel]]></dc:creator><pubDate>Tue, 05 Jun 2007 14:59:04 GMT</pubDate></item></channel></rss>