vs2010+qt4編譯出現error LNK2001: 無法解析的外部符號 "public: virtual struct QMetaObject等錯誤


1、當vs2010編譯qt時會出現以下錯誤:

           1>------ 已啟動全部重新生成: 項目: MyDialog, 配置: Debug Win32 ------
           1>生成啟動時間為 2015/9/9 14:57:04。
           1>InitializeBuildStatus:
           1>  正在創建“Debug\MyDialog.unsuccessfulbuild”,因為已指定“AlwaysCreate”。
           1>CustomBuild:
           1>  Moc'ing LoginDlg.h...
           1>ClCompile:
           1>  LoginDlg.cpp
           1>  main.cpp
           1>  正在生成代碼...
           1>LoginDlg.obj : error LNK2001: 無法解析的外部符號 "public: virtual struct QMetaObject const * __thiscall CLoginDlg::metaObject(void)const " (?         metaObject@CLoginDlg@@UBEPBUQMetaObject@@XZ)
           1>LoginDlg.obj : error LNK2001: 無法解析的外部符號 "public: virtual void * __thiscall CLoginDlg::qt_metacast(char const *)" (?qt_metacast@CLoginDlg@@UAEPAXPBD@Z)
           1>LoginDlg.obj : error LNK2001: 無法解析的外部符號 "public: virtual int __thiscall CLoginDlg::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@CLoginDlg@@UAEHW4Call@QMetaObject@@HPAPAX@Z)
           1>D:\VC++\QtT\MyDialog\\MyDialog.exe : fatal error LNK1120: 3 個無法解析的外部命令
           1>
           1>生成失敗。
           1>
           1>已用時間 00:00:03.23
            ========== 全部重新生成: 成功 0 個,失敗 1 個,跳過 0 個 ==========

2、出現以上錯誤的原因是由於在GeneratedFiles/Debug文件中缺少一個moc_XXX.cpp文件,如下圖所示:

 

3、缺少的文件名是什么呢?那么首先要找到Q_OBJECT宏在那個頭文件中,比如在上圖中該宏在LoginDlg.h文件中,那么生成的文件時moc_LoginDlg.cpp,要生成此文件需要qt庫中的一個moc.exe文件,如下圖所示:

 

4、通過cmd進入到此目錄中,然后執行:moc "D:\VC++\QtT\MyDialog\MyDialog\LoginDlg.h" -o "D:\VC++\QtT\MyDialog\MyDialog\moc_LoginDlg.cpp"

如下圖所示:

 

5、然后會在D:\VC++\QtT\MyDialog\MyDialog\目錄生成一個moc_LoginDlg.cpp文件,如下圖所示:

 

 

6、將moc_LoginDlg.cpp文件拷貝到GeneratedFiles/Debug目錄中,並在vs中添加該文件,如下圖所示:

 

 

7、重新編譯即可

 


免責聲明!

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



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