QT中的Q_OBJECT(未定义对vtable xxx的引用)[重复]
Posted
技术标签:
【中文标题】QT中的Q_OBJECT(未定义对vtable xxx的引用)[重复]【英文标题】:Q_OBJECT in QT (undefined reference to vtable xxx) [duplicate] 【发布时间】:2016-03-12 05:03:43 【问题描述】:我写了一个简单的测试如下:
#include <QCoreApplication>
#include <QObject>
class Foo : public QObject
Q_OBJECT
;
class foo1
;
int main(int argc, char* argv[])
QCoreApplication a(argc, argv);
Foo f;
return a.exec();
这给了我一个错误:
错误:未定义对 `vtable for Foo' 的引用:
但是,当我将 Foo f
更改为 Foo f()
时,它没有任何错误。
所以我的问题是f
和f()
有什么区别?
【问题讨论】:
【参考方案1】:添加括号使其成为函数声明。没有实际创建对象,因此不会发生错误。
Foo f; //declaration of variable of type Foo
Foo f(); //declaration of function taking no args and returning Foo
undefined reference to vtable for Foo
错误是因为您添加了对Q_OBJECT
的调用而没有再次运行 qmake。运行后,错误应该会消失。
【讨论】:
我已经尝试清理项目并再次运行qmake,但是当我使用Foo f时仍然出现错误【参考方案2】:这个错误是由于在main.cpp中声明了类扩展QObject,所以 只需在您的主要方法之前(或之后)添加 #include "main.moc" 行。 但是下次为 QObject 扩展类定义一个单独的 h/cpp 文件。
【讨论】:
以上是关于QT中的Q_OBJECT(未定义对vtable xxx的引用)[重复]的主要内容,如果未能解决你的问题,请参考以下文章
Qt错误:error: undefined reference to `vtable for 类名'
Qtundefined reference to `vtable for xxx’
Qtundefined reference to `vtable for xxx’