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

原文地址:https://www.cnblogs.com/kongbursi-2292702937/p/15044522.html