Qt 出現“undefined reference to `vtable for”


在QT中定義了一個線程類,繼承自QThread, 在類中未加 Q_OBJECT 時編譯正常,加入后報錯如下:

undefined reference to `vtable for myThread'

在串口下,手動make,無錯誤。

百度后得知:

一:預編譯器打開宏Q_OBJECT,聲明若干個由moc處理(implement)的成員函數。

       如果得到類似於“undefined reference to vtable for LcdNumber”的編譯錯誤(if you get compiler errors along the lines of "undefined reference to vtable for LcdNumber"),你可能是忘記了執行moc,或者忘記了將moc輸出加入到link命令里。

某一個類中如果加入Q_OBJECT后,則link時提示:undefined reference to vtable for "xxx::xxx".刪掉它則沒有任何問題.

解決:嘗試(1):把所有的obj文件和uic文件刪除,重新編譯.仍然失敗.

去trolltech的mail lists找到原因: 因為qmake生成Makefile的時候,這個類的頭文件中並沒有Q_OBJECT,所以在相應的Makefile里面並沒有用moc xxx.h命令,最終導致鏈接失敗.重新運行qmake,問題解決.
在查找解決方法的時候,附帶發現一點:
qmake 不會處理.cpp文件里的Q_OBJECT,所以,如果在.cpp文件中有它的話,也會產生undefined reference to vtable for "xxx::xxx". 這時,需要先用moc xxxx.cpp生成相應的moc文件,再包含到.cpp里面去,才能解決這個問題.

 

解決方法:

修改makefile中相關文件。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM