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 沒有用。


網路上爬了一下文,發現出現這錯誤,原因不外有三




  1. Base class 中定義的 virtual function,derived class 中重新宣告,但未有實作


  2. 缺少 deconstructor 實作


  3. 原本文件中無 Q_OBJECT,後來再加上去

我的情況是 3。理由是在沒有 Q_OBJECT 的 class,Qt 編譯時就不會產生 moc 檔(沒有 moc 檔就是這錯誤的主因)。而要不要產生 moc 檔,是跑 qmake 時加在 makefile 裡的。


我的情況是,原本 class 沒有 Q_OBJECT,qmake 產生的 makefile 自然不會使用 moc。後來我加入了 Q_OBJECT,但我沒有重新跑 qmake。


SO,解法就是重跑一次 qmake 就解決了。


留言

熱門文章