1. 程式人生 > >error LNK2001: 無法解析的外部符號 "public: virtual struct QMetaObject const * __cdecl MainWindow::metaObject(

error LNK2001: 無法解析的外部符號 "public: virtual struct QMetaObject const * __cdecl MainWindow::metaObject(

error LNK2001: 無法解析的外部符號 “public: virtual struct QMetaObject const * __cdecl MainWindow::metaObject(void)const “

問題描述:在編譯Qt介面檔案時候,出現一下報錯

2>mainwindow.obj : error LNK2001: 無法解析的外部符號 "public: virtual struct QMetaObject const * __cdecl MainWindow::metaObject(void)const " (?metaObject@MainWindow@@UEBAPEBUQMetaObject@@
XZ) 2>mainwindow.obj : error LNK2001: 無法解析的外部符號 "public: virtual void * __cdecl MainWindow::qt_metacast(char const *)" (?qt_metacast@MainWindow@@UEAAPEAXPEBD@Z) 2>mainwindow.obj : error LNK2001: 無法解析的外部符號 "public: virtual int __cdecl MainWindow::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@MainWindow
@@UEAAHW4Call@QMetaObject@@HPEAPEAX@Z) 2>D:\MyProject\Visual_Studio2015_build\ARMD\ARMDEndoscopeCapture\bin\bin\Release\ARMDEndoscopeCaptureTest.exe : fatal error LNK1120: 3 個無法解析的外部命令
問題分析:程式碼可以編譯通過,但是在連結時候報錯,顯示無法解析外部符號,這種無法解析外部符號的問題一般有以下幾種:
1、函式只有宣告卻沒有寫定義,如果都寫了那就可能是程式檔案沒找到;

2、添加了#include<標頭檔案>,沒有連結到.lib檔案或者.obj檔案。

回到這個問題上,明顯是.obj沒連線上,而且包含Qt語法的example.cpp檔案一定是需要編譯器自動編譯成moc_example.cpp檔案才能被標準的編譯器執行。

所以這個問題就是沒有生成moc檔案

解決方法:
1、如果是用cmake配置的,就在CMakeLists.txt檔案中新增

# Instruct CMake to run moc automatically when needed.
set(CMAKE_AUTOMOC ON)