LNK2001 unresolved external symbol "public: virtual struct QMetaObject const * __thiscall myClass::metaObject(void)const " (metaObject@myClass@@UBEPBUQMetaObject@@XZ) LNK2001 unresolved external symbol "public: virtual void * __thiscall myClass::qt_metacast(char const *)" (qt_metacast@myClass@@UAEPAXPBD@Z) LNK2001 unresolved external symbol "public: virtual int __thiscall myClass::qt_metacall(enum QMetaObject::Call,int,void * *)" (qt_metacall@myClass@@UAEHW4Call@QMetaObject@@HPAPAX@Z) LNK1120 3 unresolved externals
開發環境為 VS2015,建構 Qt Project 的方式為手動執行,而非透過 Qt VS Tools 進行設定,因此這些錯誤訊息在透過 Qt VS Tools 所建構的專案並不會發生。
問題的原因主要是使用到 Q_OBJECT 的 header 檔沒有成功生成對應的 moc 檔案,因此解決方法可以根據下面的圖示解決:
1. 在使用到的檔案點選滑鼠右鍵進入屬性,這時候可以看到在 Item Type 那邊為 "C/C++ header"。
2. 將 "C/C++ header" 修改成 "Customer Build Tool"。
3. 點選左側 "Customer Build Tool" 頁面,剛更改的時候可能會沒有內容,可以先關閉屬性頁面,再重新開啟即會出現。主要在 "Command Line", "Outputs", 以及 "Additional Dependencies" 加入方法,分別為:
Command Line
"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"
Outputs
.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp
Additional Dependencies
$(QTDIR)\bin\moc.exe;%(FullPath)
4. 將生成好的 moc 檔案拉進 solution 內。
如此應該可以解決這樣的 LINK error。
No comments:
Post a Comment