QT+VS:错误:error LNK2001: 无法解析的外部符号 “public: virtual struct QMetaObject const * __cdecl

本文主要是介绍QT+VS:错误:error LNK2001: 无法解析的外部符号 “public: virtual struct QMetaObject const * __cdecl,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

错误:

CCMainWindow.obj : error LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject const * __cdecl CCMainWindow::metaObject(void)const " (?metaObject@CCMainWindow@@UEBAPEBUQMetaObject@@XZ)
1>CCMainWindow.obj : error LNK2001: 无法解析的外部符号 "public: virtual void * __cdecl CCMainWindow::qt_metacast(char const *)" (?qt_metacast@CCMainWindow@@UEAAPEAXPEBD@Z)
1>CCMainWindow.obj : error LNK2001: 无法解析的外部符号 "public: virtual int __cdecl CCMainWindow::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@CCMainWindow@@UEAAHW4Call@QMetaObject@@HPEAPEAX@Z)
1>D:\Qt2\QQx64\x64\Debug\QQx64.exe : fatal error LNK1120: 3 个无法解析的外部命令

本人先后在csdn上搜索了一堆解决办法,有很多都是在说如何生成 moc_**.cpp文件,但我的已经生成了,可以在moc文件夹中找到,移除关联文件再重新保存也不行。

最后,发现是多了一个双引号,VS2019竟然不报错,枉我这么信任它
在这里插入图片描述
小心VS2019,这样写没有错误提示,等你编译之后会出现跟链接相关的错误!
当你出现链接相关的错误时,又恰好用了VS2019,就看看头文件是否出错!

追加:
我又出现了一次类似这样的错误:
在这里插入图片描述
1.这一次,我吸取教训,首先检查了头文件。但是头文件并没有出错。

2.然后,我开始看 moc文件夹 中是否生成了 moc_*.cpp文件。果然发现了问题,我新写的两个类的文件并没有生成 moc_**.cpp文件,这两个类就是报错中涉及到的两个类

3.之后,我把这两个报错的头文件从项目中排除,在重新添加入项目中。编译后还是这样报错。

4.最后,我查看这两个类的头文件的属性,右键单击对应的头文件,找到属性,点进去查看。发现:
项类型是 C/C++标头,两个头文件都是这样。头文件被当成普通的C/C++编译,当然会报错,元对象系统是C++的扩展,C/C++编译是不能生成 moc_**.cpp文件的。
在这里插入图片描述
4.将项类型 设置为 Qt Meta-Object Compiler (moc),点击确定
在这里插入图片描述
元对象系统的三个基本条件:类必须继承自QObject、类声明Q_OBJECT宏(默认私有)、元对象编译器moc。
信号和槽是QT自行定义的一种通信机制,它独立于标准的 C/C++ 语言,要正确的处理信号和槽,必须借助一个称为 moc(Meta-Object Compiler),也就是“元对象编译器”。

这篇关于QT+VS:错误:error LNK2001: 无法解析的外部符号 “public: virtual struct QMetaObject const * __cdecl的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/307666

相关文章

nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析(结合应用场景)

《nginx-t、nginx-sstop和nginx-sreload命令的详细解析(结合应用场景)》本文解析Nginx的-t、-sstop、-sreload命令,分别用于配置语法检... 以下是关于 nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析,结合实际应

MyBatis中$与#的区别解析

《MyBatis中$与#的区别解析》文章浏览阅读314次,点赞4次,收藏6次。MyBatis使用#{}作为参数占位符时,会创建预处理语句(PreparedStatement),并将参数值作为预处理语句... 目录一、介绍二、sql注入风险实例一、介绍#(井号):MyBATis使用#{}作为参数占位符时,会

Qt使用QSqlDatabase连接MySQL实现增删改查功能

《Qt使用QSqlDatabase连接MySQL实现增删改查功能》这篇文章主要为大家详细介绍了Qt如何使用QSqlDatabase连接MySQL实现增删改查功能,文中的示例代码讲解详细,感兴趣的小伙伴... 目录一、创建数据表二、连接mysql数据库三、封装成一个完整的轻量级 ORM 风格类3.1 表结构

SpringBoot+Docker+Graylog 如何让错误自动报警

《SpringBoot+Docker+Graylog如何让错误自动报警》SpringBoot默认使用SLF4J与Logback,支持多日志级别和配置方式,可输出到控制台、文件及远程服务器,集成ELK... 目录01 Spring Boot 默认日志框架解析02 Spring Boot 日志级别详解03 Sp

PostgreSQL的扩展dict_int应用案例解析

《PostgreSQL的扩展dict_int应用案例解析》dict_int扩展为PostgreSQL提供了专业的整数文本处理能力,特别适合需要精确处理数字内容的搜索场景,本文给大家介绍PostgreS... 目录PostgreSQL的扩展dict_int一、扩展概述二、核心功能三、安装与启用四、字典配置方法

SQL Server配置管理器无法打开的四种解决方法

《SQLServer配置管理器无法打开的四种解决方法》本文总结了SQLServer配置管理器无法打开的四种解决方法,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录方法一:桌面图标进入方法二:运行窗口进入检查版本号对照表php方法三:查找文件路径方法四:检查 S

Qt QCustomPlot库简介(最新推荐)

《QtQCustomPlot库简介(最新推荐)》QCustomPlot是一款基于Qt的高性能C++绘图库,专为二维数据可视化设计,它具有轻量级、实时处理百万级数据和多图层支持等特点,适用于科学计算、... 目录核心特性概览核心组件解析1.绘图核心 (QCustomPlot类)2.数据容器 (QCPDataC

深度解析Java DTO(最新推荐)

《深度解析JavaDTO(最新推荐)》DTO(DataTransferObject)是一种用于在不同层(如Controller层、Service层)之间传输数据的对象设计模式,其核心目的是封装数据,... 目录一、什么是DTO?DTO的核心特点:二、为什么需要DTO?(对比Entity)三、实际应用场景解析

深度解析Java项目中包和包之间的联系

《深度解析Java项目中包和包之间的联系》文章浏览阅读850次,点赞13次,收藏8次。本文详细介绍了Java分层架构中的几个关键包:DTO、Controller、Service和Mapper。_jav... 目录前言一、各大包1.DTO1.1、DTO的核心用途1.2. DTO与实体类(Entity)的区别1

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.