使用Q_OBJECT 時出現「對vtable 的未定義引用」錯誤
連結器找不到時會出現「'對vtable 的未定義引用'”錯誤繼承自QObject 並宣告Q_OBJECT 巨集的類別的虛函數表(vtable)。出現此錯誤的原因有很多。
可能的原因:
-
缺少MOC 單元: MOC(元物件編譯器)產生一個單獨的單元文件,其中一個包含QObject 相關功能的實作。確保 MOC 產生的單元包含在連結過程中。
-
實作文件中的類別聲明: 將類別聲明放在單獨的頭檔中,而不是實作文件中。建置系統可能不會掃描 MOC 處理的實作檔。
-
缺少 qmake 呼叫: Qmake 產生 MOC 所需的建置規則。如果該類別最初不屬於 Qt 元物件系統,請再次執行 qmake 來更新其時間戳記並觸發其執行。
解決方案:
要解決此問題,請按照下列步驟操作:
- 將類別聲明移至單獨的頭檔。
- 從 Qt Creator 的專案上下文選單中執行「Run qmake」或手動執行更新專案檔案的時間戳記以強制呼叫 qmake。
- 確保產生的 MOC 單元包含在連結過程中。
這些措施應該消除「對 vtable 的未定義引用」錯誤並允許您的程式碼成功編譯。
以上是為什麼在使用 Q_OBJECT 時出現「未定義的 vtable 引用」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!