c++ - 对 vtable 的 undefined reference ...

标签 c++ qt linker-errors vtable

我正在尝试编写一个基本上像 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/

相关文章:

c++ - 检查数字作为 ICU 代码点的有效性

c++ - 错误 : invalid use of non-static data member in CPP

c++ - 如何创建一个行为类似于消息框的 Qt 窗口?

c++ - Qt 信号和槽发送结构数组

gcc - 对 _GLOBAL_OFFSET_TABLE_ 的 undefined reference (仅在生成二进制文件时)

ios - ld : framework not found FileProvider for architecture x86_64

c++ - 为什么operator new不能构造非常量大小的多维数组?

c++ - 如何在 EC2 上对 OpenGL 进行单元测试

c++ - 为什么我的 Qt 信号没有被事件队列处理?

ios - 架构 arm64 : "_FIRAuthStateDidChangeInternalNotificationAppKey", 的 undefined symbol 引用自