error LNK2001: 無法解析的外部符號 "public: virtual struct QMetaObject const * __cdecl MainWindow::metaObject(
阿新 • • 發佈:2019-02-16
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)