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文件中寫代碼就可以了(你可以把生成的代碼都刪掉,寫自己的就行)