QT中的Q_OBJECT(对vtable xxx的未定义引用)

时间:2016-03-12 05:03:44

标签: c++ qt

我写了一个简单的测试如下:

#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()时,它会毫无错误地符合 所以我的问题是ff()之间有什么不同?

2 个答案:

答案 0 :(得分:2)

添加括号使其成为函数声明。实际上没有创建任何对象,因此不会发生错误。

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错误是因为您在没有再次运行qmake的情况下添加了对Q_OBJECT的调用。一旦运行,错误就会消失。

答案 1 :(得分:1)

这个错误是由于在main.cpp中声明的类扩展QObject引起的,所以 只需在主方法之前(或之后)添加 #include“main.moc”行。 但是下次为QObject扩展类定义一个单独的h / cpp文件。