【发布时间】:2012-03-09 13:55:37
【问题描述】:
我正在尝试编写一个基本上像 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
【问题讨论】:
-
根据documentation,run 是一个受保护的成员,而不是公共的。不过,我怀疑这会是您错误的根源。
-
@obmarg:是的,因为 run 是虚拟的,他从未定义过。
-
嗯...我编译得很好。 MinGw 上的 4.7.4 + 4.8.0。您使用的是哪个操作系统/Qt 版本?
-
对于通过 google 来到这里的任何人:我们收到此错误是因为 .pro 文件中有多余的空格
-
@stativ 的回答虽然在这种情况下不正确,但在使用 Qt 时却是导致此错误消息的一个非常常见的原因。如果您添加了一个新的 QObject 派生类,但忘记将其添加到 HEADERS 变量(或以其他方式运行 moc 并与结果对象链接),这准确地是看到的错误消息。对于很多人偶然发现这个问题,这将是问题的原因......
标签: c++ qt linker-errors vtable