Search code examples
c++qtlinker-errorsvtable

undefined reference to vtable for ...


I am trying to write an Http proxy that basically works like indianwebproxy

So i fired up qtcreator and but one of my classes is failing to compile with the infamous error : undefined reference to vtable for HttpProxyThreadBrowser. I can't figure out why its doing this. I read through similar questions on Stackoverflow and apparently the problem is with undefined virtual methods that are not pure But i have not declared any virtual functions. Here is my class

class HttpProxyThreadBrowser : public QThread
{
public:
    HttpProxyThreadBrowser(QTcpSocket outgoingSocket,QTcpSocket  browserSocket,QObject *parent = 0);
    ~HttpProxyThreadBrowser(){};
    void run();

private:
    QTcpSocket outgoingSocket;
    QTcpSocket browserSocket;

};

And I define the class here in pastebin so as not to bore you. Unfortunately i cant find out why the vtable is undefined. Please assist.

httpproxythreadbrowser.cpp:5: undefined reference to `vtable for HttpProxyThreadBrowser
collect2: ld returned 1 exit status

Solution

  • You can't copy QTcpSockets, so it may cause other cryptic errors if you try to pass them by copy rather than by address.

        HttpProxyThreadBrowser(QTcpSocket * outgoingSocket,QTcpSocket * browserSocket,QObject *parent = 0);
    
    private:
        QTcpSocket* outgoingSocket;
        QTcpSocket* browserSocket;
    

    And completely recompiling your project may help, when you change header files, because qmake generated Makefile can sometimes fail to notice the changes.