2016-03-12 48 views
0

我寫了一個簡單的測試如下:Q_OBJECT在QT(未定義引用的vtable XXX)

#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(); 
} 

這給了我一個錯誤:

error: undefined reference to `vtable for Foo':

但是,當我改變Foo fFoo f(),它遵守沒有任何錯誤。
所以我的問題是什麼ff()之間的不同?

回答

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錯誤是因爲你添加到Q_OBJECT呼叫,而無需再次運行的qmake。一旦運行,錯誤應該消失。

+0

我已經嘗試清理項目並再次運行qmake,但錯誤仍然出現,當我使用Foo f – himlen

1

此錯誤是造成延長QObject的類在main.cpp中聲明,所以 之前(或之後)加行的#include「main.moc」你的主要方法。 但是在下次爲QObject擴展類定義一個單獨的h/cpp文件。