我正在尝试编写一个基本上像 indianwebproxy 一样工作的 Http 代理
所以我启动了 qtcreator,但是我的一个类无法编译并出现臭名昭著的错误:undefined reference to vtable for HttpProxyThreadBrowser
。我不明白为什么要这样做。我通读了 Stackoverflow 上的类似问题,显然是 the problem is with undefined virtual methods that are not pure但是我没有声明任何虚函数。这是我的课
class HttpProxyThreadBrowser : public QThread
{
public:
HttpProxyThreadBrowser(QTcpSocket outgoingSocket,QTcpSocket browserSocket,QObject *parent = 0);
~HttpProxyThreadBrowser(){};
void run();
private:
QTcpSocket outgoingSocket;
QTcpSocket browserSocket;
};
我在 pastebin 中定义类以免让你厌烦。不幸的是我无法找出为什么 vtable 是未定义的。请协助。
httpproxythreadbrowser.cpp:5: undefined reference to `vtable for HttpProxyThreadBrowser
collect2: ld returned 1 exit status
最佳答案
析构函数是隐式虚拟
,因为基类有一个虚拟析构函数。
GNU 编译器发出 vtable 以及第一个非内联虚拟方法(“关键方法”)。由于您的 d'tor 是在类内部定义的,因此它是隐式虚拟的,并且由于没有其他虚拟方法,因此您没有关键方法。
没有具体类只有虚拟内联方法的用例,因为它们只能内联到派生类中。
我会将 dtor 的定义移动到实现文件中。
我不确定你是否也需要在这里使用 moc
,或者 QThread
衍生物是否可以在没有的情况下工作(IIRC 你只需要 Qt 的转换运算符,并且用于信号/槽)。
关于c++ - 对 vtable 的 undefined reference ...,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9635172/