<?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[undefined reference auf einen virtuellen Destruktor]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>ich habe ein Problem bei dem Zusammenspiel einer abstrakten Schnittstellenklasse:</p>
<p>Die Klasse Communication soll als Schnittstelle fungieren:</p>
<pre><code class="language-cpp">class Communication
{
public:
    virtual ~Communication();

    virtual bool Open();
    virtual void Close();
    virtual bool isInterfaceConnected();
    virtual bool isSnifferConnected();
    virtual void SendData(unsigned char*, int);
    virtual QList&lt;unsigned char&gt; GetData();
};
</code></pre>
<p>Die Klasse FTDI soll die Klasse Communication implementieren:</p>
<pre><code class="language-cpp">#include &quot;Communication.h&quot;
#include &quot;ftd2xx.h&quot;
#include &quot;global.h&quot;

class FTDI : public Communication
{
public:
	FTDI();
	~FTDI();	
	/*
	 * Methode zum Öffnen der Schnittstelle
	 */
	bool Open();

	/*
	 * Methode zum Schließen der Schnittstelle
	 */
	void Close();

	/*
	 * Methode zum Überprüfen der Verbindung zum Interface (FTDI, Ethernet, o.ä.)
	 */
	bool isInterfaceConnected();

	/*
	 * Methode zum Überprüfen der verbindung zum Hitachi
	 */
	bool isSnifferConnected();

	/*
	 * Methode zum Senden von Daten an die Hardware
	 */
	void SendData(unsigned char*, int);

	/*
	 * Methode zum Empfangen von Daten von der Hardware
	 */
	QList&lt;unsigned char&gt; GetData();

private:
	FT_STATUS		ftStatus;
	FT_HANDLE		ftHandle;
	unsigned long 	numDevices;
	unsigned char 	RxBuffer[25000];
	QList&lt;unsigned char&gt;	newTelegram;
	unsigned char i_aufrufe;
};
</code></pre>
<p>Alle Methoden der Klasse FTDI wurden implementiert.<br />
Der Compiler listet weder Fehler noch Warnings. Aber der Linker:</p>
<blockquote>
<p>./debug/FTDI.o: In function <code>ZN4FTDIC2Ev': C:/Qt/Projekte/fmbMonitor/FTDI.cpp:25: undefined reference to</code>Communication::~Communication()'<br />
./debug/FTDI.o: In function <code>ZN4FTDIC1Ev': C:/Qt/Projekte/fmbMonitor/FTDI.cpp:25: undefined reference to</code>Communication::~Communication()'<br />
./debug/FTDI.o: In function <code>ZN4FTDID2Ev': C:/Qt/Projekte/fmbMonitor/FTDI.cpp:29: undefined reference to</code>Communication::~Communication()'<br />
C:/Qt/Projekte/fmbMonitor/FTDI.cpp:29: undefined reference to <code>Communication::~Communication()' ./debug/FTDI.o: In function</code>ZN4FTDID1Ev':<br />
C:/Qt/Projekte/fmbMonitor/FTDI.cpp:29: undefined reference to <code>Communication::~Communication()' ./debug/FTDI.o:C:/Qt/Projekte/fmbMonitor/FTDI.cpp:29: more undefined references to</code>Communication::~Communication()' follow<br />
./debug/FTDI.o: In function <code>Z16q\_atomic\_set_ptrPVvPv': C:/Qt/Projekte/fmbMonitor/../../4.3.3/include/QtCore/../../src/corelib/thread/qatomic.h:(.text$_ZN13CommunicationC2Ev\[Communication::Communication()\]+0x8): undefined reference to</code>vtable for Communication'</p>
</blockquote>
<p>Kann mir das jemand erklären, was der Linker von dem virtuellen Destruktor und dem nicht existierendem Konstruktor will??</p>
<p>Mit freundlichen Grüßen</p>
<p>Christian</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/199808/undefined-reference-auf-einen-virtuellen-destruktor</link><generator>RSS for Node</generator><lastBuildDate>Sat, 03 Oct 2026 23:11:02 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/199808.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 07 Dec 2007 12:20:59 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to undefined reference auf einen virtuellen Destruktor on Fri, 07 Dec 2007 12:20:59 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>ich habe ein Problem bei dem Zusammenspiel einer abstrakten Schnittstellenklasse:</p>
<p>Die Klasse Communication soll als Schnittstelle fungieren:</p>
<pre><code class="language-cpp">class Communication
{
public:
    virtual ~Communication();

    virtual bool Open();
    virtual void Close();
    virtual bool isInterfaceConnected();
    virtual bool isSnifferConnected();
    virtual void SendData(unsigned char*, int);
    virtual QList&lt;unsigned char&gt; GetData();
};
</code></pre>
<p>Die Klasse FTDI soll die Klasse Communication implementieren:</p>
<pre><code class="language-cpp">#include &quot;Communication.h&quot;
#include &quot;ftd2xx.h&quot;
#include &quot;global.h&quot;

class FTDI : public Communication
{
public:
	FTDI();
	~FTDI();	
	/*
	 * Methode zum Öffnen der Schnittstelle
	 */
	bool Open();

	/*
	 * Methode zum Schließen der Schnittstelle
	 */
	void Close();

	/*
	 * Methode zum Überprüfen der Verbindung zum Interface (FTDI, Ethernet, o.ä.)
	 */
	bool isInterfaceConnected();

	/*
	 * Methode zum Überprüfen der verbindung zum Hitachi
	 */
	bool isSnifferConnected();

	/*
	 * Methode zum Senden von Daten an die Hardware
	 */
	void SendData(unsigned char*, int);

	/*
	 * Methode zum Empfangen von Daten von der Hardware
	 */
	QList&lt;unsigned char&gt; GetData();

private:
	FT_STATUS		ftStatus;
	FT_HANDLE		ftHandle;
	unsigned long 	numDevices;
	unsigned char 	RxBuffer[25000];
	QList&lt;unsigned char&gt;	newTelegram;
	unsigned char i_aufrufe;
};
</code></pre>
<p>Alle Methoden der Klasse FTDI wurden implementiert.<br />
Der Compiler listet weder Fehler noch Warnings. Aber der Linker:</p>
<blockquote>
<p>./debug/FTDI.o: In function <code>ZN4FTDIC2Ev': C:/Qt/Projekte/fmbMonitor/FTDI.cpp:25: undefined reference to</code>Communication::~Communication()'<br />
./debug/FTDI.o: In function <code>ZN4FTDIC1Ev': C:/Qt/Projekte/fmbMonitor/FTDI.cpp:25: undefined reference to</code>Communication::~Communication()'<br />
./debug/FTDI.o: In function <code>ZN4FTDID2Ev': C:/Qt/Projekte/fmbMonitor/FTDI.cpp:29: undefined reference to</code>Communication::~Communication()'<br />
C:/Qt/Projekte/fmbMonitor/FTDI.cpp:29: undefined reference to <code>Communication::~Communication()' ./debug/FTDI.o: In function</code>ZN4FTDID1Ev':<br />
C:/Qt/Projekte/fmbMonitor/FTDI.cpp:29: undefined reference to <code>Communication::~Communication()' ./debug/FTDI.o:C:/Qt/Projekte/fmbMonitor/FTDI.cpp:29: more undefined references to</code>Communication::~Communication()' follow<br />
./debug/FTDI.o: In function <code>Z16q\_atomic\_set_ptrPVvPv': C:/Qt/Projekte/fmbMonitor/../../4.3.3/include/QtCore/../../src/corelib/thread/qatomic.h:(.text$_ZN13CommunicationC2Ev\[Communication::Communication()\]+0x8): undefined reference to</code>vtable for Communication'</p>
</blockquote>
<p>Kann mir das jemand erklären, was der Linker von dem virtuellen Destruktor und dem nicht existierendem Konstruktor will??</p>
<p>Mit freundlichen Grüßen</p>
<p>Christian</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1416458</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1416458</guid><dc:creator><![CDATA[bw1faeh0]]></dc:creator><pubDate>Fri, 07 Dec 2007 12:20:59 GMT</pubDate></item><item><title><![CDATA[Reply to undefined reference auf einen virtuellen Destruktor on Fri, 07 Dec 2007 12:30:11 GMT]]></title><description><![CDATA[<p>Du fällst auf einen C++ Sonderfall rein.</p>
<p>Ein virtueller Destruktor braucht dennoch eine Implementierung, und sei es im einfachsten Fall wie folgt:</p>
<p>virtual ~Klasse() {};</p>
<p>Dies gilt auch dann, wenn der Destruktur rein virtuell deklariert ist (dann halt noch mit =0).</p>
<p>cu André<br />
Nachtrag: JEDE rein virtuelle Funktion (ohne Implementierung) immer mit =0 deklarieren [ virtual int foo() = 0; ].</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1416463</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1416463</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Fri, 07 Dec 2007 12:30:11 GMT</pubDate></item><item><title><![CDATA[Reply to undefined reference auf einen virtuellen Destruktor on Fri, 07 Dec 2007 12:29:32 GMT]]></title><description><![CDATA[<p>Soll die pure abstract sein? Dann fehlt da noch was:</p>
<pre><code class="language-cpp">class Communication
{
public:
    virtual ~Communication(){}

    virtual bool Open()=0;
    virtual void Close()=0;
    virtual bool isInterfaceConnected()=0;
    virtual bool isSnifferConnected()=0;
    virtual void SendData(unsigned char*, int)=0;
    virtual QList&lt;unsigned char&gt; GetData()=0;
};
</code></pre>
<p>MfG Kimmi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1416465</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1416465</guid><dc:creator><![CDATA[kimmi]]></dc:creator><pubDate>Fri, 07 Dec 2007 12:29:32 GMT</pubDate></item><item><title><![CDATA[Reply to undefined reference auf einen virtuellen Destruktor on Fri, 07 Dec 2007 12:30:37 GMT]]></title><description><![CDATA[<p>Dass Dein Destruktor virtuell ist ändert nichts daran dass Du ihn implementieren musst. Du gibst ja nicht explizit an, dass es sich um eine abstrakte, d.h. nicht implementierte Funktion handelt. (Aber Achtung: Der Destuktor ist ein Sonderfall, der <strong>selbst dann</strong>, wenn er abstrakt ist, eine Implementierung benötigt, einfach weil der Destruktor der abgeleiteten Klasse ihn aufruft.)</p>
<p>Die fehlende vtable dürfte demselben Problem entstammen, da der g++ (dessen Meldungen ich hier zu erkennen glaube) die vtable immer an den Ort der Implementierung der ersten virtuellen Funktion der Klasse legt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1416466</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1416466</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Fri, 07 Dec 2007 12:30:37 GMT</pubDate></item><item><title><![CDATA[Reply to undefined reference auf einen virtuellen Destruktor on Fri, 07 Dec 2007 12:48:01 GMT]]></title><description><![CDATA[<p>Wo implementiere ich denn den virtuellen Destruktor? Wenn ich die leere Implementierung</p>
<p>Communication::~Communication(){};</p>
<p>mit an das Ende der Header-Datei hänge, in der die Klasse deklariert wurde, dann werde ich nur so mit Fehlern überhäuft.</p>
<p>Muss ich für die eine Zeile eine extra cpp-Datei spendieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1416482</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1416482</guid><dc:creator><![CDATA[bw1faeh0]]></dc:creator><pubDate>Fri, 07 Dec 2007 12:48:01 GMT</pubDate></item><item><title><![CDATA[Reply to undefined reference auf einen virtuellen Destruktor on Fri, 07 Dec 2007 12:50:21 GMT]]></title><description><![CDATA[<p>Entweder Du schiebst sie in eine eigene cpp-Datei<br />
Oder Du definierst &quot;<strong>inline</strong> Communication::~Communication() {}&quot; im Header<br />
Oder Du definierst direkt in der Klasse &quot;virtual ~Communication() {}&quot; (wie von kimmi vorgeschlagen)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1416485</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1416485</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Fri, 07 Dec 2007 12:50:21 GMT</pubDate></item><item><title><![CDATA[Reply to undefined reference auf einen virtuellen Destruktor on Fri, 07 Dec 2007 12:57:46 GMT]]></title><description><![CDATA[<p>sorry, hatte das mit dem {} von kimmi überlesen.</p>
<p>Nun Funktioniert scheinbar alles.</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1416488</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1416488</guid><dc:creator><![CDATA[bw1faeh0]]></dc:creator><pubDate>Fri, 07 Dec 2007 12:57:46 GMT</pubDate></item></channel></rss>