LNK2001 無法解析的外部符號 "public: virtual struct QMetaObject


LNK2001    無法解析的外部符號 "public: virtual struct QMetaObject const * __cdecl CViewerWidget::metaObject(void)const " (?metaObject@CViewerWidget@@UEBAPEBUQMetaObject@@XZ) LNK2001 無法解析的外部符號 "public: virtual void * __cdecl CViewerWidget::qt_metacast(char const *)" (?qt_metacast@CViewerWidget@@UEAAPEAXPEBD@Z) LNK2001 無法解析的外部符號 "public: virtual int __cdecl CViewerWidget::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@CViewerWidget@@UEAAHW4Call@QMetaObject@@HPEAPEAX@Z)

 

剛開始我以為是我的lib文件或者dll文件配置的路徑不對(配置方法可見我博客——visual studio 2015導入其他qt項目的dll和lib和.h頭文件

后來我發現下面這種報錯方式(即這個virtual修飾的函數是自己寫的):

LNK2001    無法解析的外部符號 "public: virtual void __cdecl CDigitalEarthView::OnInitialUpdate(void)" (?OnInitialUpdate@CDigitalEarthView@@UEAAXXZ)

這種形式錯誤原因是定義的virtual 方法沒有進行實現。

 

但是我的那個錯誤提示virtual修飾的方法QMetaObject明顯就是Qt的方法,后面發現在vs上建立Qt項目之后不要添加.cpp文件(如下圖)

 

 

 

 

現在是在Qt項目中,好像vs要對文件做一些Qt相關配置,所以不要建立C++的cpp文件,要像下面這種方式一樣

 

 

它會創建.h和.cpp兩個文件,如果你不用.h文件,刪掉就可以。

在這樣建立的cpp文件中寫代碼就可以了(你可以把生成的代碼都刪掉,寫自己的就行)

 


免責聲明!

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



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