天天看點

由Q_OBJECT引起的undefined reference to vtable for "xxx::xxx"問題

問題描述:某一個類中如果加入Q_OBJECT後,則link時提示:undefined reference to vtable for "xxx::xxx"。可是删掉後運作程式時在Qt的應用程式輸出中又會顯示Object::connect: No such slot XXX::XXX()。

原因:删除Q_OBJECT之後,該類的信号/槽機制就失效了,是以在其他類中connect該類的槽時,就會顯示"No such slot……"。在該類中加上Q_OBJECT之後,link時提示:undefined reference to vtable for "xxx::xxx"。如果不是文法錯誤,且不論在QtCreator中怎麼清理項目,錯誤仍存在,那麼可能的原因是該類原來沒有添加Q_OBJECT,則在程式輸出目錄中由qmake生成的makefile檔案裡不存在編譯Q_OBJECT的資訊,是以信号/槽機制失效。而在該類加上Q_OBJECT後,QtCreator沒有自動執行qmake來更新makefile檔案,這時就會在link時有上述錯誤。

解決辦法:删除程式的輸出目錄build-XXX-XXX-release,重新建構項目就行了。也可以手動運作一次qmake來解決。

繼續閱讀