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
The destructor is implicitly virtual
because a base class has a virtual d'tor.
The GNU compiler emits the vtable along with the first non-inline virtual method ("key method"). As your d'tor is defined inside the class, it is implicitly virtual, and as there are no other virtual methods, you don't have a key method.
There is no use case where a concrete class would have only virtual inline methods, as they can be inlined only into derived classes.
I'd move the definition of the dtor to the implementation file.
I'm not sure whether you need to use moc
here as well, or if QThread
derivatives work without (IIRC you need it only for Qt's cast operators, and for signals/slots).
You can't copy QTcpSocket
s, 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.
I had also a undefined reference to vtable
error and followed the steps in Undefined reference to vtable... Q_OBJECT macro, that adviced me to run qmake
and... it worked!
This is often caused by not linking the files generated by automoc.
First, you need to run automoc on the headers where classes using Q_OBJECT are defined, in your case "httpproxythreadbrowser.h". This will generate a "*.moc" file.
Now there are two common approaches how to continue. Either you can #include the .moc file at the end of your .cpp file with class definition or you can pass it to the compiler as anoher source file.