這個奇怪的問題的QObject多重繼承和運營商新
爲什麼下面的代碼是G ++
#include <QObject>
class B {
public:
B(){}
~B(){}
};
class A : public QObject, public B {
Q_OBJECT
public:
A(QObject * parent = 0) : QObject(parent), B() {}
~A(){}
};
int main(int argc, char *argv[])
{
A a1();
//A * a = new A();
//delete a;
return 0;
}
OK,這不能被編譯
/*... the same class definitions as above */
int main(int argc, char *argv[])
{
//A a1();
A * a = new A();
delete a;
return 0;
}
//error: undefined reference to `vtable for A'
我的意思是做什麼卡住讓第二好?
PS好了,我把所有東西放在單獨的文件中,並且工作正常。所以這是一個Q_OBJECT宏的問題,我想。
有趣的鏈接,謝謝。 +1。我認爲這與問題有關。 「全內聯類 對於多態類[72],該頭文件的源(.cpp)文件中至少應有一個非內聯定義(函數或靜態成員)。將無法找到任何虛擬方法定義,並會報告類似的錯誤。 全內聯類在C++中是合法的,但是它們在與多態混合時無法以其預期的方式工作。我想這可能是發生了什麼,因爲提問者提到.cpp文件有幫助。 – tmpearce 2012-03-10 06:16:25
@tmpearce thanx for your reply ... – shofee 2012-03-10 06:29:25
謝謝,當我添加從QObject繼承的另一個類並重建項目時,我從工作項目中擺脫了我真正的問題(我在此建模)。奇怪,但它有幫助。 – 2012-03-10 06:39:41