Undefined reference to vtable for XXX
參考 http://blog.donews.com/netexe/archive/2006/02/09/720544.aspx
我的 class
class LanInfoCheckPage : public QWidget, public DgConfigInterface, public Ui::formLanInfoCheck
{
Q_OBJECT
public:
LanInfoCheckPage(QWidget *parent = 0);
~LanInfoCheckPage();
QWidget *getWidget() {return this;}
QString GetConfig();
virtual QString GetConfigCaption() {return IDS_CONFIG_LAN_INFO;}
void SetConfig(DgConfigPara& configPara);
public slots:
void on_edtNewMac_textChanged( QString );
void on_btnAdd_clicked();
void on_btnRemove_clicked();
};
如果不加入 Q_OBJECT,link 時就不會出錯。加了就會出錯,重新 make clean; make 沒有用。
網路上爬了一下文,發現出現這錯誤,原因不外有三
- Base class 中定義的 virtual function,derived class 中重新宣告,但未有實作
- 缺少 deconstructor 實作
- 原本文件中無 Q_OBJECT,後來再加上去
我的情況是 3。理由是在沒有 Q_OBJECT 的 class,Qt 編譯時就不會產生 moc 檔(沒有 moc 檔就是這錯誤的主因)。而要不要產生 moc 檔,是跑 qmake 時加在 makefile 裡的。
我的情況是,原本 class 沒有 Q_OBJECT,qmake 產生的 makefile 自然不會使用 moc。後來我加入了 Q_OBJECT,但我沒有重新跑 qmake。
SO,解法就是重跑一次 qmake 就解決了。
留言
張貼留言