C++ QT中的Q_对象(对vtable xxx的未定义引用)

C++ QT中的Q_对象(对vtable xxx的未定义引用),c++,qt,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(); } #包括 #包括 Foo类:公共Q

我编写了一个简单的测试,如下所示:

#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();
}
#包括
#包括
Foo类:公共QoObject
{
Q_对象
};
foo1类
{
};
int main(int argc,char*argv[])
{
qcorea应用程序(argc、argv);
福福;
返回a.exec();
}
这给了我一个错误:

错误:未定义对“vtable for Foo”的引用:

但是,当我将
Foo f
更改为
Foo f()
时,它符合要求,没有任何错误。

所以我的问题是
f
f()
之间有什么不同

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

Foo f; //declaration of variable of type Foo

Foo f(); //declaration of function taking no args and returning Foo

未定义对vtable for Foo的引用
错误是因为您在没有再次运行qmake的情况下添加了对
Q_对象
的调用。一旦运行,错误就会消失。

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

Foo f; //declaration of variable of type Foo

Foo f(); //declaration of function taking no args and returning Foo

未定义对vtable for Foo的引用
错误是因为您在没有再次运行qmake的情况下添加了对
Q_对象
的调用。一旦运行,错误就会消失。

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

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

我已经尝试清理project并再次运行qmake,但是当我使用Foo fI时错误仍然出现。我已经尝试清理project并再次运行qmake,但是当我使用Foo f时错误仍然出现