<?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[Zu dumm zum vererben]]></title><description><![CDATA[<p>Hi all,<br />
ich stehe hier grad ein bißchen auf dem Schlauch. Ich habe folgende Klassenstruktur:</p>
<pre><code class="language-cpp">class MySocket
{
	public:
		MySocket();
		virtual ~MySocket();	

	protected:
		virtual SOCKET CreateSocket() = 0;

	private:
		SOCKET m_Socket;

};

class MyTCPSocket : public MySocket
{
	public:
		MyTCPSocket(){};

	protected:
		virtual SOCKET CreateSocket();

};
</code></pre>
<p>und will im Konstruktor von MySocket</p>
<pre><code class="language-cpp">m_Socket = CreateSocket();
</code></pre>
<p>aufrufen.<br />
Wenn ich dann in einem Testprog eine Instanz von MyTCPSocket erzeugen will, beschwert sich der Linker über eine nicht aufgelöste Referenz:<br />
mysocket.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol &quot;&quot;pr<br />
otected: virtual unsigned int __thiscall MySocket::CreateSocket(void)&quot; (?CreateS<br />
ocket@MySocket@@MAEIXZ)&quot; in Funktion &quot;&quot;public: __thiscall MySocket::MySocket(voi<br />
d)&quot; (??0MySocket@@QAE@XZ)&quot;.</p>
<p>CreateSocket ist in MyTCPSocket implementiert.<br />
Wo ist mein Fehler?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/222229/zu-dumm-zum-vererben</link><generator>RSS for Node</generator><lastBuildDate>Mon, 05 Oct 2026 04:09:39 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/222229.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 09 Sep 2008 15:13:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zu dumm zum vererben on Tue, 09 Sep 2008 15:13:42 GMT]]></title><description><![CDATA[<p>Hi all,<br />
ich stehe hier grad ein bißchen auf dem Schlauch. Ich habe folgende Klassenstruktur:</p>
<pre><code class="language-cpp">class MySocket
{
	public:
		MySocket();
		virtual ~MySocket();	

	protected:
		virtual SOCKET CreateSocket() = 0;

	private:
		SOCKET m_Socket;

};

class MyTCPSocket : public MySocket
{
	public:
		MyTCPSocket(){};

	protected:
		virtual SOCKET CreateSocket();

};
</code></pre>
<p>und will im Konstruktor von MySocket</p>
<pre><code class="language-cpp">m_Socket = CreateSocket();
</code></pre>
<p>aufrufen.<br />
Wenn ich dann in einem Testprog eine Instanz von MyTCPSocket erzeugen will, beschwert sich der Linker über eine nicht aufgelöste Referenz:<br />
mysocket.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol &quot;&quot;pr<br />
otected: virtual unsigned int __thiscall MySocket::CreateSocket(void)&quot; (?CreateS<br />
ocket@MySocket@@MAEIXZ)&quot; in Funktion &quot;&quot;public: __thiscall MySocket::MySocket(voi<br />
d)&quot; (??0MySocket@@QAE@XZ)&quot;.</p>
<p>CreateSocket ist in MyTCPSocket implementiert.<br />
Wo ist mein Fehler?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1579305</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1579305</guid><dc:creator><![CDATA[Belli]]></dc:creator><pubDate>Tue, 09 Sep 2008 15:13:42 GMT</pubDate></item><item><title><![CDATA[Reply to Zu dumm zum vererben on Tue, 09 Sep 2008 15:17:33 GMT]]></title><description><![CDATA[<p>Du rufst im Konstruktor von MySocket die Funktion CreateSocket auf. Im Konstruktor klappt das noch nicht mit den virtuellen Funktionen, deshalb soll die Funktion MySocket::CreateSocket aufgerufen werden - und die ist nicht implementiert <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1579306</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1579306</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Tue, 09 Sep 2008 15:17:33 GMT</pubDate></item><item><title><![CDATA[Reply to Zu dumm zum vererben on Tue, 09 Sep 2008 15:44:49 GMT]]></title><description><![CDATA[<p>Belli schrieb:</p>
<blockquote>
<p>Wo ist mein Fehler?</p>
</blockquote>
<p><strong>Stark vereinfacht dargestellt</strong>:</p>
<p>Wenn du eine Instanz einer Klasse erzeugst, die über eine Basisklasse verfügt, erfolgt die Erzeugung immer aus Richtung der Basisklasse:</p>
<pre><code class="language-cpp">class A;
class B : public A;
class C : public B;
</code></pre>
<p>Wenn ich nun ein Objekt der Klasse C erzeuge, wird zuerst der A-Anteil, dann der B-Anteil und dann der C-Anteil erzeugt. Ergo kann ein Konstruktor der Basisklasse auch noch nicht die virtuellen Methoden aus den abgeleiteten Klassen kennen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1579326</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1579326</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Tue, 09 Sep 2008 15:44:49 GMT</pubDate></item><item><title><![CDATA[Reply to Zu dumm zum vererben on Tue, 09 Sep 2008 17:24:54 GMT]]></title><description><![CDATA[<p>Ich danke Euch für die Info!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1579367</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1579367</guid><dc:creator><![CDATA[Belli]]></dc:creator><pubDate>Tue, 09 Sep 2008 17:24:54 GMT</pubDate></item><item><title><![CDATA[Reply to Zu dumm zum vererben on Tue, 09 Sep 2008 17:28:16 GMT]]></title><description><![CDATA[<p>So im Nachhinein wundert es mich etwas, daß nicht schon der Compiler meckert ... Der kriegt doch schon die Info, daß CreateSocket() in MySocket abstrakt ist, und daß es aus dem Konstruktor aufgerufen wird ...</p>
<p>Naja, ändern würde es natürlich nix an den Fakten ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1579369</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1579369</guid><dc:creator><![CDATA[Belli]]></dc:creator><pubDate>Tue, 09 Sep 2008 17:28:16 GMT</pubDate></item></channel></rss>