1. 程式人生 > >QT+VS2008編譯出現errorLNK2001:無法解析的外部符號

QT+VS2008編譯出現errorLNK2001:無法解析的外部符號

若出現如下錯誤:
錯誤 1 error LNK2001: 無法解析的外部符號 "public: virtual struct QMetaObject const * __thiscall Widget::metaObject(void)const " ([email protected]@@[email protected]@XZ) 
錯誤 2 error LNK2001: 無法解析的外部符號 "public: virtual void * __thiscall Widget::qt_metacast(char const *)" ([email protected]@@UAEPA

XP[email protected]
錯誤 3 error LNK2001: 無法解析的外部符號 "public: virtual int __thiscall Widget::qt_metacall(enum QMetaObject::Call,int,void * *)" ([email protected]@@[email protected]@@[email protected])
錯誤 4 fatal error LNK1120: 3 個無法解析的外部命令

查詢原因:
1. 是否加上了Q_OBJECT巨集?
2.  widget裡用到signal slot了吧?(也許是後續加的)
3. 類定義在cpp裡? 沒有相應的.h檔案?
4. 如果以前沒訊號槽新增加的, 那麼makefile需要重新生成。

總結的原因如下:
vs在編譯時會產生一系列的命令以控制該.h、.cpp檔案的編譯過程,並且,以後不會自動修改這些命令。
利用Qt程式設計時,寫好.h、.cpp檔案並第一次編譯之後,若.h檔案中定義類時沒有新增Q_OBJECT巨集以及訊號函式、槽函式,VS編譯命令中就沒有moc命令,就不會呼叫Qt的moc工具以生成moc_*.cpp檔案;並且即使添加了Q_OBJECT巨集之後,VS也不會自動新增moc命令,因而不會生成moc檔案。VS在LINK時,找不到moc檔案,就出現了error LNK2001的錯誤

解決方法:假設程式碼檔案分別為hello.h、hello.cpp、ui_hello.h。需要編譯生成並新增上moc_hello.cpp檔案。

右擊hello.h,選擇“自定義生成步驟”,“常規”
  命令列:moc.exe hello.h -o moc_hello.cpp
  輸出:moc_hello.cpp
  附加依賴項:moc.exe hello.h
  確定,然後,右擊hello.h,選擇 “編譯”,則在資料夾中生成moc_hello.cpp,再將其新增到vs的原始檔列表中


相關推薦

QT+VS2008編譯出現errorLNK2001:無法解析外部符號

若出現如下錯誤: 錯誤 1 error LNK2001: 無法解析的外部符號 "public: virtual struct QMetaObject const * __thiscall Wid

Qt creator 編譯錯誤:無法解析外部符號(命令)

log void virtual win idg track deb dia popu 問題來自於:僅僅是在creator 中加入了一個新的DIalog類,並在main(),中實例化並show。就出現例如以下的錯誤: main.obj:-1: error: L

c++連接mysql數據庫出現無法解析外部符號的問題

vs、解析外部符號include,lib文件夾都已經拷到了項目根目錄,並且設置好了路徑,生成就會出現無法解析的外部符號,提示我無法轉到函數的定義,最後發現vs2017默認win32,但是我的程序集64位的。更改後,重新設置目錄,路徑即可。c++連接mysql數據庫出現無法解析外部符號的問題

OpenCv在win下靜態庫的編譯和使用,以及部分無法解析外部符號的錯誤解決

這裡演示的是opencv3.4版本的編譯和使用過程。1、靜態庫編譯CMake進行配置,編譯時我選擇build目錄為build-static。其中需要設定選擇安裝目錄,設定   “CMAKE_INSTALL_PREFIX”  為   /build-static/install 

VC++編譯lua庫 無法解析lua符號問題

dsm div number blog reg gist html name dpa VC編譯lua庫 出現錯誤: 錯誤 36 error LNK1120: 21 個無法解析的外部命令 C:\Users\luozhuang\Desktop\onscripter

error2019無法解析外部符號

“error LNK2019: 無法解析的外部符號 error LNK2001: 無法解析的外部符號“private: static struct _OVERLAPPED CUsbCom::g_WriteOverlapped” 應該是工程設定的問題 沒有連線相應

VS2015無法解析外部符號

在使用VS編輯C++時,遇到了無法解析外部符號的錯誤 嚴重性程式碼說明專案 檔案行 錯誤LNK2019 無法解析的外部符號 "public: __thiscall Employee::Employe

編譯Qt時遇到”error LNK2001: 無法解析外部符號

解決辦法:執行QT的命令列工具 From a command prompt, change the directory to hello, and typeqmake -project to create a platform-independent project fil

C++ 單例模式 出現錯誤“: 無法解析外部符號

#include <iostream>using namespace std;class A {private:A(){};static A *a;public:static A &getA(){if(a==NULL){a = new A();}retu

使用動態庫時出現“LNK2001無法解析外部專案...”的解決辦法

今天在幫同事解決一個編譯錯誤時又學到了一些新東西,一直以來對於動態庫的使用都有些模稜兩可,這裡大概總結一下,關於擴充套件類的使用: 1. 檢查當前工程與動態庫的工程使用的字元編碼方式是否一致; 配置項:右鍵-屬性-配置屬性-常規-“字符集” 2..檢查是否引用lib檔案; 

ARToolKit編譯error LNK2019: 無法解析外部符號 ___glutInitWithExit@12,該符號在函式 _glutInit_ATEXIT_HACK@8 中被引用 解決辦法

1錯誤: 在批量編譯ARToolKit的時候,老是遇到報以下兩個錯誤: 2解決辦法: 在專案工程屬性–》C/C++ –》前處理器 –》前處理器定義 中新增 GLUT_BUILDING_LIB 3原因: OpenGL沒有配置好

在LNMP環境下創建多個虛擬主機時出現nginx無法解析php文件故障

php nginx 下載 問題描述: 搭建的LNMP環境運行php文件時,每次通過瀏覽器打開總是直接將文件下載到本地,而無法通過瀏覽器正常顯示,而對於html文件則可以正常使用。 具體配置如下: location ~ \.php$ { r

ubuntu16.04出現DNS無法解析

1.#sudo gedit /etc/resolv.conf 開啟DNS配置檔案 加入一行: nameserver 114.114.114.114(之前用的8.8.8.8今天突然無法解析) 17.1

開啟Hadoop2.6.0出現ssh無法解析主機名等錯誤提示的解決辦法!

hd-m1: starting namenode, logging to /hadoop/hadoop-2.6.0/logs/hadoop-root-namenode-hd-m1.out HotSpot(TM): ssh: Could not resolve hostname HotSpot(TM): Tem

異常解決:Hadoop啟動出現ssh無法解析主機名等錯誤提示

這幾天終於把Hadoop折騰起來了,自從本科畢設做完就再沒接觸過,現在研究生論文又拾起來了,不過以前用的是Hadoop0.20.0,最新的穩定版本已經升到2.7.1了,對於我這停留在原先版本的人來說,改動還是挺大的。 先說一下剛搭建執行時報的錯誤: WA

lmdb編譯過程中出現無法解析外部符號 NtCreateSection

在為Caffe編譯lmdb.lib的過程中,碰到了下面的問題、 error LNK2019: 無法解析的外部符號 NtClose,該符號在函式 mdb_env_map 中被引用 D:\google-

VS下QT外掛 連線資料庫出現error LNK2019: 無法解析外部符號QSqlDatabase問題解決

出現如下錯誤: error LNK2019: 無法解析的外部符號 "__declspec(dllimport) public: __thiscall  QSqlDatabase::~QSqlDatabase(void)" ([email protected]@[e

關於在VS2012下opencv+QT出現無法解析外部命令”問題的解決方案

問題:   當我在屬性管理器新增我原本配置好的opencv的屬性頁時   就會出現上面的那個問題,但是那個屬性頁我當時是在Debug Win32下配置的,並且可以正常執行   開始我以為是x64和win32的問題後來我都分別試了一下還是不行,因為qt是msvc2012_64

Qt學習: 如何在Qt中使用全局變量!出現無法解析的命令的問題看過來!!

window 軟件 編程 計算機 qt 很多小夥伴在Qt編程時,不會使用全局變量,其實基本有兩種方式來定義使用全局變量,第一種是根據c/c++的extern來進行多文件的使用,第二種方法就是把全局變量放在類中,當做類靜態變量來使用,一般來說,第一種方式嚴重破壞了類的封裝,所以還是推薦第二種