我写了一个简单的测试如下:
#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()
之间有什么不同?
答案 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文件。