<?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[&amp;quot;undefined reference to vtable...&amp;quot; hä?]]></title><description><![CDATA[<p>Hallo,<br />
ich hab ein kleines Client-Server-Programm gescriebne bzw bin noch dabei. Dabei hab ich eine KLasse Client weclhe von der KLasse TcpClient abgeleitet ist. Der Quellcode steht unten. Beim Compilieren bekomme ich nun immer diesen Fehler:</p>
<pre><code>main.o(.text+0x27): In function `main': 
/root/Programmierung/C++/Netzwerkprogrammierung/NetAdmin/client/client/main.cpp:31: undefined reference to `Client::~Client [in-charge]()' 
main.o(.gnu.linkonce.t._ZN6ClientC1Ev+0x19): In function `Client::Client[in-charge]()': 
/usr/include/TCP-Klassen/tcptemplate.h:41: undefined reference to `vtable for Client' 
main.o(.gnu.linkonce.t._ZN9TcpClientC2Ev+0x19): In function `TcpClient::TcpClient[not-in-charge]()': 
/usr/include/TCP-Klassen/tcptemplate.h:41: undefined reference to `vtable for TcpClient' 
collect2: ld returned 1 exit status 
gmake[2]: *** [client] Error 1
</code></pre>
<p>Ich benutze als IDE kdevelop unter Suse 9.0</p>
<p>Nun noch der Code:<br />
client.h</p>
<pre><code class="language-cpp">#include &lt;TCP-Klassen/tcpclient.h&gt;

/**
  *@author Kante
  */

class Client : public TcpClient  {
public: 
  Client() : TcpClient() {;}
  Client(char* ip)  : TcpClient(ip) {;}
  Client(char* ip, int por) : TcpClient(ip, por) { ;}
	~Client();
  void action();
};
</code></pre>
<p>client.cpp</p>
<pre><code class="language-cpp">#include &quot;client.h&quot;

  void Client::action()
  { }
</code></pre>
<p>Superklasse tcpclient.h</p>
<h1></h1>
<pre><code class="language-cpp">/*/Client Basis Klasse auf TCP/IP-Basis
  *@author Kante
  */
#include &quot;tcptemplate.h&quot;

class TcpClient : public TcpTemplate  {

private:
  struct sockaddr_in servAddr;
  char *destinationIp;         //Server-IP

public:
//Konstuktor: fuellt die Variablen Ip und port bei deklaration mit den uebergebenen Werten

  TcpClient() : TcpTemplate() {destinationIp = &quot;127.0.0.1&quot;;}
  TcpClient(char* ip) : TcpTemplate() {destinationIp = ip;}
  TcpClient(char* ip, int p) : TcpTemplate(p) {destinationIp = ip;}

  virtual ~TcpClient() {;}

  void initClient()
  { 	initSocket(); fillStruct();}

  void fillStruct()
  {  bzero((char *) &amp;servAddr, sizeof(servAddr));
     servAddr.sin_family = AF_INET;
     servAddr.sin_addr.s_addr = inet_addr(destinationIp);
     servAddr.sin_port = htons(port);}

  void verbinden()
  {  if(sock::connect(sock, (struct sockaddr*) &amp;servAddr, sizeof(servAddr)) &lt; 0)
     {perror(&quot;CONNECT: &quot;); exit(1);}}

  int returnSocket() {return TcpTemplate::sock;}

  virtual void action();
};
</code></pre>
<p>Superklasse tcptemplate.h</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;stdlib.h&gt;
#include &lt;sys/socket.h&gt;
#include &lt;sys/types.h&gt;
#include &lt;netinet/in.h&gt;
#include &lt;arpa/inet.h&gt;

using namespace std;

class TcpTemplate {
protected:
        int sock;      //Socket
        int port;      //Port
public:

  TcpTemplate()		{ port = NORM_PORT;}
  TcpTemplate(int p)	{ port = p;}
  virtual ~TcpTemplate() {;}

//Port setzen
  void setPort(int p) {port = p;}
//Socket zurückgeben
  int getSocket() { return sock;}
//Socket intialisieren
  void initSocket(){ if((sock = socket(AF_INET, SOCK_STREAM, 0)) &lt; 0)
                     {   perror(&quot;SOCKET: &quot;); exit(1);}}

  template &lt;class T&gt;
  void recvObj(int sock,T *dataptr, int size)
  { int n;
    if ((n = read(sock,(char *) dataptr, size)) != size)
    {    cout &lt;&lt; &quot;Fehler beim Datenempfang: &quot; &lt;&lt; n &lt;&lt; &quot; bytes empfangen&quot; &lt;&lt; endl;
         perror(&quot;Fehler:&quot;);}}

  template &lt;class T&gt;
  void sendObj(int sock,T *dataptr,int size)
  { int n;
    if ((n = write(sock,(char *) dataptr, size)) != size)
    { cout &lt;&lt; &quot;Fehler bei der uebertragung der Daten! &quot; &lt;&lt; n &lt;&lt; &quot;Bytes ?bertragen!&quot; &lt;&lt; endl;}
      perror(&quot;Fehler:&quot;);}

 };
</code></pre>
<p>So, es muss irgendwie mit den virtuellen Funktionen zusammenhängen obwohl ich nicht weis wie.<br />
Vlt weis ja jemand von euch rat (ne kleine erklärung was der Fehler überhaupt bedeutet wär auch nicht schlecht, immerhin will ich was dabei lernen <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>
<p>mit freundlichen Grüßen Kante</p>
<p>Oh merke gerade das ich im falschen Forum gelandet bin. Habs hier reingestellt da das ganze später über eine Qt-GUI verfügen soll. Hat aber bis jetz noch nichma die ansätze da ichs nicht compl. kann. Also bitte verschieben oder so belassen....</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/158120/quot-undefined-reference-to-vtable-quot-hä</link><generator>RSS for Node</generator><lastBuildDate>Wed, 09 Sep 2026 16:38:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/158120.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 01 Sep 2006 15:42:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to &amp;quot;undefined reference to vtable...&amp;quot; hä? on Fri, 01 Sep 2006 15:44:42 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich hab ein kleines Client-Server-Programm gescriebne bzw bin noch dabei. Dabei hab ich eine KLasse Client weclhe von der KLasse TcpClient abgeleitet ist. Der Quellcode steht unten. Beim Compilieren bekomme ich nun immer diesen Fehler:</p>
<pre><code>main.o(.text+0x27): In function `main': 
/root/Programmierung/C++/Netzwerkprogrammierung/NetAdmin/client/client/main.cpp:31: undefined reference to `Client::~Client [in-charge]()' 
main.o(.gnu.linkonce.t._ZN6ClientC1Ev+0x19): In function `Client::Client[in-charge]()': 
/usr/include/TCP-Klassen/tcptemplate.h:41: undefined reference to `vtable for Client' 
main.o(.gnu.linkonce.t._ZN9TcpClientC2Ev+0x19): In function `TcpClient::TcpClient[not-in-charge]()': 
/usr/include/TCP-Klassen/tcptemplate.h:41: undefined reference to `vtable for TcpClient' 
collect2: ld returned 1 exit status 
gmake[2]: *** [client] Error 1
</code></pre>
<p>Ich benutze als IDE kdevelop unter Suse 9.0</p>
<p>Nun noch der Code:<br />
client.h</p>
<pre><code class="language-cpp">#include &lt;TCP-Klassen/tcpclient.h&gt;

/**
  *@author Kante
  */

class Client : public TcpClient  {
public: 
  Client() : TcpClient() {;}
  Client(char* ip)  : TcpClient(ip) {;}
  Client(char* ip, int por) : TcpClient(ip, por) { ;}
	~Client();
  void action();
};
</code></pre>
<p>client.cpp</p>
<pre><code class="language-cpp">#include &quot;client.h&quot;

  void Client::action()
  { }
</code></pre>
<p>Superklasse tcpclient.h</p>
<h1></h1>
<pre><code class="language-cpp">/*/Client Basis Klasse auf TCP/IP-Basis
  *@author Kante
  */
#include &quot;tcptemplate.h&quot;

class TcpClient : public TcpTemplate  {

private:
  struct sockaddr_in servAddr;
  char *destinationIp;         //Server-IP

public:
//Konstuktor: fuellt die Variablen Ip und port bei deklaration mit den uebergebenen Werten

  TcpClient() : TcpTemplate() {destinationIp = &quot;127.0.0.1&quot;;}
  TcpClient(char* ip) : TcpTemplate() {destinationIp = ip;}
  TcpClient(char* ip, int p) : TcpTemplate(p) {destinationIp = ip;}

  virtual ~TcpClient() {;}

  void initClient()
  { 	initSocket(); fillStruct();}

  void fillStruct()
  {  bzero((char *) &amp;servAddr, sizeof(servAddr));
     servAddr.sin_family = AF_INET;
     servAddr.sin_addr.s_addr = inet_addr(destinationIp);
     servAddr.sin_port = htons(port);}

  void verbinden()
  {  if(sock::connect(sock, (struct sockaddr*) &amp;servAddr, sizeof(servAddr)) &lt; 0)
     {perror(&quot;CONNECT: &quot;); exit(1);}}

  int returnSocket() {return TcpTemplate::sock;}

  virtual void action();
};
</code></pre>
<p>Superklasse tcptemplate.h</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;stdlib.h&gt;
#include &lt;sys/socket.h&gt;
#include &lt;sys/types.h&gt;
#include &lt;netinet/in.h&gt;
#include &lt;arpa/inet.h&gt;

using namespace std;

class TcpTemplate {
protected:
        int sock;      //Socket
        int port;      //Port
public:

  TcpTemplate()		{ port = NORM_PORT;}
  TcpTemplate(int p)	{ port = p;}
  virtual ~TcpTemplate() {;}

//Port setzen
  void setPort(int p) {port = p;}
//Socket zurückgeben
  int getSocket() { return sock;}
//Socket intialisieren
  void initSocket(){ if((sock = socket(AF_INET, SOCK_STREAM, 0)) &lt; 0)
                     {   perror(&quot;SOCKET: &quot;); exit(1);}}

  template &lt;class T&gt;
  void recvObj(int sock,T *dataptr, int size)
  { int n;
    if ((n = read(sock,(char *) dataptr, size)) != size)
    {    cout &lt;&lt; &quot;Fehler beim Datenempfang: &quot; &lt;&lt; n &lt;&lt; &quot; bytes empfangen&quot; &lt;&lt; endl;
         perror(&quot;Fehler:&quot;);}}

  template &lt;class T&gt;
  void sendObj(int sock,T *dataptr,int size)
  { int n;
    if ((n = write(sock,(char *) dataptr, size)) != size)
    { cout &lt;&lt; &quot;Fehler bei der uebertragung der Daten! &quot; &lt;&lt; n &lt;&lt; &quot;Bytes ?bertragen!&quot; &lt;&lt; endl;}
      perror(&quot;Fehler:&quot;);}

 };
</code></pre>
<p>So, es muss irgendwie mit den virtuellen Funktionen zusammenhängen obwohl ich nicht weis wie.<br />
Vlt weis ja jemand von euch rat (ne kleine erklärung was der Fehler überhaupt bedeutet wär auch nicht schlecht, immerhin will ich was dabei lernen <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>
<p>mit freundlichen Grüßen Kante</p>
<p>Oh merke gerade das ich im falschen Forum gelandet bin. Habs hier reingestellt da das ganze später über eine Qt-GUI verfügen soll. Hat aber bis jetz noch nichma die ansätze da ichs nicht compl. kann. Also bitte verschieben oder so belassen....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1129248</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1129248</guid><dc:creator><![CDATA[Kante23]]></dc:creator><pubDate>Fri, 01 Sep 2006 15:44:42 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;undefined reference to vtable...&amp;quot; hä? on Fri, 01 Sep 2006 16:24:14 GMT]]></title><description><![CDATA[<p>Hi,<br />
die Implementierung für ~Client() fehlt. Entweder sowie bei den anderen in .h mit rein oder besser in die .cpp, dann aber alles da rein;</p>
<p>Und da: <strong>{;}</strong> kannste getrost das Semikolon weglassen...</p>
<p>Dann nochmal kompilieren und die kommenden Fehler versuchen selber zu lösen <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1129263</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1129263</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 01 Sep 2006 16:24:14 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;undefined reference to vtable...&amp;quot; hä? on Fri, 01 Sep 2006 16:50:55 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/profile.php?mode=viewprofile&amp;u=13054" rel="nofollow">GPC</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/viewforum.php?f=51" rel="nofollow">Andere GUIs - Qt, GTK+, wxWidgets</a> in das Forum <a href="http://www.c-plusplus.net/forum/viewforum.php?f=15" rel="nofollow">C++</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic.php?t=39405" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1129272</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1129272</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Fri, 01 Sep 2006 16:50:55 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;undefined reference to vtable...&amp;quot; hä? on Fri, 01 Sep 2006 18:27:15 GMT]]></title><description><![CDATA[<p>Hy,<br />
also den destruktor hab ich implementiert aber dann kommt diese Fehlermeldung:</p>
<pre><code>client.o(.gnu.linkonce.r._ZTI6Client+0x8):/usr/include/g++/cmath:477: undefined reference to `typeinfo for TcpClient' 
client.o(.gnu.linkonce.t._ZN9TcpClientD2Ev+0xb): In function `TcpClient::~TcpClient [not-in-charge]()': 
/usr/include/g++/cmath:477: undefined reference to `vtable for TcpClient' 
main.o(.gnu.linkonce.t._ZN9TcpClientC2Ev+0x19): In function `TcpClient::TcpClient[not-in-charge]()': 
/usr/include/TCP-Klassen/tcptemplate.h:41: undefined reference to `vtable for TcpClient' 
collect2: ld returned 1 exit status
</code></pre>
<p>also das selbe in grün blos eine &quot;schicht&quot; tiefer.<br />
Doch der Destrukto ist ja implementiert.<br />
was heist eigentlich dieser Fehler (voralllem was ist die vtable)?<br />
Würds gern verstehen.<br />
mfg Kante</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1129336</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1129336</guid><dc:creator><![CDATA[Kante23]]></dc:creator><pubDate>Fri, 01 Sep 2006 18:27:15 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;undefined reference to vtable...&amp;quot; hä? on Sat, 02 Sep 2006 07:15:48 GMT]]></title><description><![CDATA[<p>Hallo,<br />
vtable steht für virtuelle Methodentabelle. Das ist ein Implementierungsartefakt, dass von Compilern gerne für die Umsetzung von virtuellen Methoden verwendet wird.</p>
<p>Für jede Klasse mit vituellen Methoden wird eine (Ausnahmen bewusst ignoriert) solche Tabelle angelegt. Die Einträge in der Tabelle sind die Adressen der virtuellen Funktionen. Überschreiben einer virtuellen Methode heißt dann nichts weiter, als das in der Tabelle die Adresse der neuen Funktion gespeichert wird. Der Aufruf einer virtuellen Methode ist dann ein zweistufiger Prozess. Erst wird in der passenden virtuellen Methodentabelle an der passenden Stelle die richtige Adresse rausgesucht, dann wird die durch die Adresse spezifizierte Funktion indirekt aufgerufen.</p>
<p>Zu deinem Problem: einige Compiler erzeugen die virtuelle Methodentabelle für eine Klasse in der cpp-Datei, in der die erste virtuelle Methode dieser Klasse definiert ist. Definierst du nun alle virtuellen Methoden einer Klasse in einer h-Datei, dann weiß der Compiler nicht, wo er die VMT ablegen soll. Beim Versuch die VMT aufzulösen stellt der Linker dann fest, das selbige fehlt -&gt; der Fehler.</p>
<p>Die Lösung: stell sicher, dass jede deiner Klassen mindestens eine ihrer virtuellen Methoden in einer cpp-Datei definiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1129469</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1129469</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Sat, 02 Sep 2006 07:15:48 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;undefined reference to vtable...&amp;quot; hä? on Sat, 02 Sep 2006 10:29:25 GMT]]></title><description><![CDATA[<p>Also langsam verzweifel ich wirklich.<br />
Wenn ich alle virtuellen Methoden in die Cpp-datei packe und implementiere ändert sich nihct viel. Wenn ich dann die Destruktoren von TcpClient und TcpTemplate nicht als virtual deklariere, bekomme ich wieder einen anderen Fehler:</p>
<pre><code>client.o(.gnu.linkonce.r._ZTI6Client+0x8): In function `__static_initialization_and_destruction_0': 
/usr/include/g++/cmath:477: undefined reference to `typeinfo for TcpClient' 
collect2: ld returned 1 exit status 
gmake[2]: *** [client] Error 1
</code></pre>
<p>warum ist das nur so schwierig? hatte och nie solche probleme mit virtuellen Fnktionen.<br />
mfg Kante</p>
<p>Hier nochma den neue Code<br />
tcptemplate.h</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;stdlib.h&gt;
#include &lt;sys/socket.h&gt;
#include &lt;sys/types.h&gt;
#include &lt;netinet/in.h&gt;
#include &lt;arpa/inet.h&gt;

using namespace std;

class TcpTemplate {
protected:
        int sock;      //Socket
        int port;      //Port
public:

  TcpTemplate()		{ port = NORM_PORT;}
  TcpTemplate(int p)	{ port = p;}
  ~TcpTemplate() ;

//Port setzen
  void setPort(int p) {port = p;}
//Socket zurückgeben
  int getSocket() { return sock;}
//Socket intialisieren
  void initSocket(){ if((sock = socket(AF_INET, SOCK_STREAM, 0)) &lt; 0)
                     {   perror(&quot;SOCKET: &quot;); exit(1);}}

  template &lt;class T&gt;
  void recvObj(int sock,T *dataptr, int size)
  { int n;
    if ((n = read(sock,(char *) dataptr, size)) != size)
    {    cout &lt;&lt; &quot;Fehler beim Datenempfang: &quot; &lt;&lt; n &lt;&lt; &quot; bytes empfangen&quot; &lt;&lt; endl;
         perror(&quot;Fehler:&quot;);}}

  template &lt;class T&gt;
  void sendObj(int sock,T *dataptr,int size)
  { int n;
    if ((n = write(sock,(char *) dataptr, size)) != size)
    { cout &lt;&lt; &quot;Fehler bei der uebertragung der Daten! &quot; &lt;&lt; n &lt;&lt; &quot;Bytes ?bertragen!&quot; &lt;&lt; endl;}
      perror(&quot;Fehler:&quot;);}

 };
</code></pre>
<p>tcptemplate.cpp</p>
<pre><code class="language-cpp">#include &quot;tcptemplate.h&quot;

TcpTemplate::~TcpTemplate() {;}
</code></pre>
<p>tcpclient.h</p>
<pre><code class="language-cpp">#include &quot;tcptemplate.h&quot;

class TcpClient : public TcpTemplate  {

private:
  struct sockaddr_in servAddr;
  char *destinationIp;         //Server-IP

public:
//Konstuktor: fuellt die Variablen Ip und port bei deklaration mit den uebergebenen Werten

  TcpClient() : TcpTemplate() {destinationIp = &quot;127.0.0.1&quot;;}
  TcpClient(char* ip) : TcpTemplate() {destinationIp = ip;}
  TcpClient(char* ip, int p) : TcpTemplate(p) {destinationIp = ip;}

  ~TcpClient();

  void initClient()
  { 	initSocket(); fillStruct();}

  void fillStruct()
  {  bzero((char *) &amp;servAddr, sizeof(servAddr));
     servAddr.sin_family = AF_INET;
     servAddr.sin_addr.s_addr = inet_addr(destinationIp);
     servAddr.sin_port = htons(port);}

  void verbinden()
  {  if(sock::connect(sock, (struct sockaddr*) &amp;servAddr, sizeof(servAddr)) &lt; 0)
     {perror(&quot;CONNECT: &quot;); exit(1);}}

  int returnSocket() {return TcpTemplate::sock;}

  virtual void action();
};
</code></pre>
<p>tcpclient.cpp</p>
<pre><code class="language-cpp">#include &quot;tcpclient.cpp&quot;

TcpClient::~TcpClient() {;}

void TcpClient::action() {;}
</code></pre>
<p>am Code von Client hat sich nichts geändert.<br />
mg Kante</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1129548</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1129548</guid><dc:creator><![CDATA[Kante23]]></dc:creator><pubDate>Sat, 02 Sep 2006 10:29:25 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;undefined reference to vtable...&amp;quot; hä? on Sat, 02 Sep 2006 12:04:22 GMT]]></title><description><![CDATA[<p>Hallo,<br />
bist du sicher, dass dein Makefile korrekt ist? Also das es alles neu baut, was neu gebaut werden muss? Linkst du gegen irgendwelche Bibliotheken? Wurden die vielleicht mit einer anderen Compiler-Version übersetzt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1129598</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1129598</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Sat, 02 Sep 2006 12:04:22 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;undefined reference to vtable...&amp;quot; hä? on Sat, 02 Sep 2006 16:48:28 GMT]]></title><description><![CDATA[<p>Na ja<br />
ganz sicher bin ich mir nich. Macht halt alles kdevelop. aber selbst wenn ich ein neues Projekt anlege und per copy&amp;paste alles verschiebe klapts nicht.<br />
Der Quellcode sollte iegentlich ok sien, oder?<br />
komme einfach nicht weiter<br />
mfg Kante</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1129762</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1129762</guid><dc:creator><![CDATA[Kante23]]></dc:creator><pubDate>Sat, 02 Sep 2006 16:48:28 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;undefined reference to vtable...&amp;quot; hä? on Sat, 02 Sep 2006 18:15:59 GMT]]></title><description><![CDATA[<p>Kante23 schrieb:</p>
<blockquote>
<p>Der Quellcode sollte iegentlich ok sien, oder?</p>
</blockquote>
<p>Was das obrige Proglem angeht schon.<br />
Aber naja son paar kleinigkeiten sind bei mir zumindest noch falsch,</p>
<ol>
<li>wo wird NORM_PORT wird definiert ?</li>
<li>dein socket::connect ist mir nicht klar..</li>
<li>du hast keinen virtuellen destruktor, obgleich virtuelle Methoden.</li>
</ol>
<p>4)! Achja, du machst</p>
<pre><code class="language-cpp">#include &quot;tcpclient.cpp&quot;
</code></pre>
<p>in der &quot;tcpclient.cpp&quot;.<br />
Das hat meine compiler verwirrt ... sollte deinen aber auch stören..</p>
<p>Naja, bei Kdevelop kannst du afaik das &quot;Projekt aufräumen&quot; und sogar nen &quot;distclean&quot; machen, dann geht nen neues autoconf und configure durch und<br />
dann sollte auch alles richtig gebaut werden, wenn der code so ist, wie hier.<br />
( bis auf die &quot;Kleinigkeiten&quot; oben)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1129833</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1129833</guid><dc:creator><![CDATA[shapeless]]></dc:creator><pubDate>Sat, 02 Sep 2006 18:15:59 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;undefined reference to vtable...&amp;quot; hä? on Sun, 03 Sep 2006 09:44:48 GMT]]></title><description><![CDATA[<p>hallo,<br />
vielen dank erstma.<br />
@<br />
ZU deinen beanstandeungen <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="🙂"
    /> :<br />
also NORM-poRt wird in tcptemplate definiert ist aber leider auf dem COde ausschnitt nicht mit drauf (hab ich vergessen zu kopieren).<br />
Das mit dem sock:: hat die Bewandniss, das der Compiler mir da schon vorher ma rumgemeckert hat, als die Klasse zusätzlich noch einer subclass von QWidget war und da gab es namenskonflikt emit connect() von Qt. Deswegen hab ich in der Include datei nen kurzen Namensraum für connect definiert (is vlt nich die beste lösung, aber mir viel keine andere ein).<br />
Die Virtuellen Destruktoren hatte ich ja am anfang, aber da gabs halt diese Probleme mit der vtable, nach dem ich das virtuell rausgenommen habe, waren es ein par weniger <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /><br />
Bei kdevelop alles neu erstellen hab ich schon probiert hat aber ichts groß gebracht (der Fehler blieb der selbe).</p>
<p>Das mit &quot;tcptemplate.cpp&quot; verwundert mich auch grad, is aber nur nen schreibfehler (aiuch wenn der Compiler mir das bis jetz noch nicht beanstandet hat).</p>
<p>Nun gibt es noch einen kurzen nachtrag: hab das ganze jetz ma außerhalb von kdevelop probiert, also einfach ne kurze main.cpp (mit der Klasse Client) mitlles g++ compilert. Und da klapts komischerweise, aber acuh nur wenn ich ein CLient objekt nicht mittels new &quot;anfordere&quot;, also nur mit</p>
<pre><code class="language-cpp">Client c();
</code></pre>
<p>und bei</p>
<pre><code class="language-cpp">Client* c = new Client();
</code></pre>
<p>kommt wieder die &quot;vtable&quot; meldung. sehr komisch,<br />
na ja vlt gehts ja noch ma<br />
mfg Kante</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1130056</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1130056</guid><dc:creator><![CDATA[Kante23]]></dc:creator><pubDate>Sun, 03 Sep 2006 09:44:48 GMT</pubDate></item></channel></rss>