[QT] error LNK2001: 无法解析的外部符号 Qt的moc机制

QT+VS:错误:error LNK2001: 无法解析的外部符号 “public: virtual struct QMetaObject const * __cdecl 本人先后在csdn上搜索了一堆解决办法,有很多都是在说如何生成 .moc文件,但我的已经生成了,可以在moc文件夹中找到,移除关联文件再重新保存也不行。小心VS2019,这样写没有错误提示,等你编译之后会出现跟链接相关的错误!当你出现链接相关的错误时,又恰好用了VS2019,就看看头文件是否出错!最后,发现是多了一个双引号,VS2019竟然不报错,枉我这么信任它。 阅读详情
 

先转一下其他人的帖,同样是error LNK2001的问题。

第一次来发个帖,如果可能的话期望找到根本原因!

几天没有关注我的QT程序,再次拿出来编译后竟然出现连接错误,因为四体不勤,没有频繁的checkin,所以无法找到中间版本,只能解决问题了。

1>MainWindowBottomWidget.obj : error LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject const * __thiscall

MainWindowBottomWidget::metaObject(void)const " (?metaObject@MainWindowBottomWidget@@UBEPBUQMetaObject@@XZ)
1>MainWindowBottomWidget.obj : error LNK2001: 无法解析的外部符号 "public: virtual void * __thiscall MainWindowBottomWidget::qt_metacast

(char const *)" (?qt_metacast@MainWindowBottomWidget@@UAEPAXPBD@Z)
1>MainWindowBottomWidget.obj : error LNK2001: 无法解析的外部符号 "public: virtual int __thiscall MainWindowBottomWidget::qt_metacall(enum

QMetaObject::Call,int,void * *)" (?qt_metacall@MainWindowBottomWidget@@UAEHW4Call@QMetaObject@@HPAPAX@Z)

问题原因:没有找到根本原因,据说是链接时无法找到对应的moc文件。
VS2008问题解决方法:在对应的cpp文件的末尾加上#include "moc_MainWindowBottomWidget.cpp"(文件名根据实际情况修改)
 


原因:
1. 是否加上了Q_OBJECT宏?
2. 你的widget里用到signal slot了吧?(也许是后续加的)
3. 类定义在cpp里了? 没有相应的.h文件?
4. 如果以前没信号槽新加的, 那么makefile需要重新生成。

如果用到信号槽但类的定义没有放在.h文件中, qmake不会自动调moc, 你就需要写#include "moc_MainWindowBottomWidget.cpp"告诉qmake你有文件需要

moc

在visual studio中,如果是接下来添加的Q_OBJECT宏、信号函数、槽函数等,由于之前编译过程中没有生成moc文件,或者该moc文件已被删除,那么新添加

后,visual studio就不会再生成moc文件了,这就导致visual studio在链接时出现以上情况的Error。

 

 

我总结的原因如下:

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的错误。

修改方法:

如果在.cpp文件的末尾添加#include "moc_MainWindowBottomWidget.cpp",确实可以解决error LNK2001的问题。但是,总有一种让人很不爽的感觉。我用以下的方法解决了这个问题:
1. 复制一份.h、.cpp文件并备份起来;
2. 在vs工区中移除并删除对应文件;
3. 新建两个空白文件,命名为*.h、*.cpp,再重新加载这两个文件至工程中;
4. 将备份中的.h、.cpp文件中的内容复制到新添加的*.h、*.cpp文件里;

 

最终解决方法: 在.cpp文件的末尾添加#include "moc_MainWindowBottomWidget.cpp",

【Qt工程】error: LNK2001: 无法解析的外部符号 “public: virtual struct QMetaObject const * 利用Qt编程时,写好.h、.cpp文件并第一次编译之后,若.h文件中定义类时没有添加Q_OBJECT宏以及信号函数、槽函数,VS编译命令中就没有moc命令,就不会调用Qt的moc工具以生成moc_*.cpp文件;在visual studio中,如果是接下来添加的Q_OBJECT宏、信号函数、槽函数等,由于之前编译过程中没有生成moc文件,或者该moc文件已被删除,那么新添加后,visual studio就不会再生成moc文件了,这就导致visual studio在链接时出现以上情况的Error。 阅读详情

相关推荐

[Qt4]VS2010编译提示error LNK2001: unresolved external symbol "public: virtual struct QMetaObject等错误解决方案

[Qt4]VS2010编译提示 error LNK2001: unresolved external symbol “public: virtual struct QMetaObject const * __cdecl 等错误的解决方案 moc处理C++

0123 's blog 3660

QT error LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject const * __thiscall Widget::metaObjec

因为QT槽的问题,导致构建过程中报错: 原因:只有继承了QObject类的类,才具有信号槽的能力。所以,为了使用信号槽,必须继承QObject。凡是QObject类(不管是直接子类还是间接子类),都应该在第一行代码写上Q_OBJECT。不管是不是使用信号槽,都应该添加这个宏。这个宏的展开将为我们的类提供信号槽机制、国际化机制以及 Qt 提供的不基于 C++ RTTI 的反射能力。因此,如果你

phenixyf的专栏 2万+

多旋翼飞行器设计与控制·Pixhawk4以及外部设备接线(笔记004)

笔记主要来源:Pixhawk 4 接线快速入门 目录 一、Pixhawk 4 的各个接口 二、接线图概览(重要传感器及外围设备) 三、飞控、GPS的安装和方向 四、电源 五、无线电遥控 六、数传电台(可选) 七、SD Card(可选) 八、电机以及其他外设 一、Pixhawk 4 的各个接口 FMU:Flight Management Unit 飞行管理组件 主 FMU 处理器:STM32F765 32 位 Arm® Cortex®-M7,216MHz,2MB...

猪猪的博客 1万+

error LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject const * __cdecl MainWindow::metaObject(

error LNK2001: 无法解析的外部符号 “public: virtual struct QMetaObject const * __cdecl MainWindow::metaObject(void)const “问题描述:在编译Qt界面文件时候,出现一下报错2>mainwindow.obj : error LNK2001: 无法解析的外部符号 "public: virtual struc

chan20的专栏 1万+

紫光同创PGL50H开发板实战:盘古50KN网口板的高速通信与数据处理

本文详细介绍了紫光同创PGL50H开发板(盘古50KN网口板)在高速通信与数据处理领域的实战应用。文章从开箱、核心芯片解析、开发环境搭建入手,重点讲解了如何配置与测试其8路千兆以太网接口和SFP光纤接口,并深入探讨了FPGA与DDR3协同进行多路数据汇聚处理的系统架构与调试方法,为网络通信与高速数据处理系统开发提供了宝贵的实践经验。

weixin_28256233的博客 452

基于PLC的冲压件自动生产线电气系统设计【附数据】

考虑到生产线的高效运行和维护简便性,选择了三菱FX系列的可编程逻辑控制器(PLC)作为核心控制单元,该型号的PLC因其高可靠性和强大的功能集,在工业自动化领域有着广泛的应用。最后,在完成初步的软件开发后,进行了多轮次的模拟测试和现场调试,逐步修正了存在的问题,最终达到了预期的功能要求。例如,对于进料环节,选用了光电传感器以精确检测物料的位置;此外,为了适应不同尺寸的工件加工需求,还特别设计了一套可调节的夹具系统,不仅提高了生产线的灵活性,同时也降低了更换模具的成本。✅ 感恩科研路上每一位志同道合的伙伴!

lagougongzuoshi的博客 1291

error LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject const * __thiscall Widget::metaObject

编写一个简单的给予QT的DEMO程序步骤大致如下: 下面开始编程: A 编写 main.cpp B 编写 hello.h C 编写 hello.cpp D 制作.ui文件,并生成ui_hello.h     打开designer,拖入一个pushButton,一个label。保存为hello.ui。然后生成ui_hello.h,并添加到项目的源文件中。   编译运

Fisher的专栏 3万+

步进电机原理及梯形加速算法

步进电机重理解与梯形加速算法

weixin_39912966的博客 1322

error LNK2001: 无法解析的外部符号 Qt的moc机制

先转一下其他人的帖,同样是error LNK2001的问题。 第一次来发个帖,如果可能的话期望找到根本原因! 几天没有关注我的QT程序,再次拿出来编译后竟然出现连接错误,因为四体不勤,没有频繁的checkin,所以无法找到中间版本,只能解决问题了。 1>MainWindowBottomWidget.obj : error LNK2001: 无法解析的外部符号 "public: virtual

1万+

在Jetson orin NX上安装部署Yolov8

1、环境准备与依赖安装2、安装PyTorch和Torchvision:从NVIDIA官方论坛或开发者下载中心获取与你的JetPack版本兼容的PyTorch wheel文件。例如,对于JetPack 5.1.2,可以安装PyTorch v2.1.0 8。:需要编译安装与PyTorch版本匹配的Torchvision。这里自己编译没有成功,下载了一个现成的可以用torchvision-0.16.2+c6f3977-cp38-cp38-linux_aarch64.whl。

xxxcccvvvbbb的博客 776

自动驾驶仿真:基于Carsim开发的加速度请求模型

1、自动驾驶行业中,算法端对于纵向控制的功能预留接口基本都是加速度,我们需要给控制器仿真加速度的信号,控制器才会实现对纵向功能的控制。2、Carsim或者其他动力学软件,主要提供者节气门开度和主缸压力进行控制。我们在进行联合仿真时,往往都要通过PID的方式将请求加速度转换成对应的节气门开度与主缸压力传给动力学软件进行闭环控制。

zataji的博客 6914

VS + QT 出现 LNK2001 无法解析的外部符号 QMetaObject 的问题

VS + Qt开发过程中有时候会新增一个QtClass(带Q_OBJECT定义的类时),发现编译无法通过,可能会出现LNK2001 的错误,这是由于IDE没有自动为新建的类生成 moc_XXXX.cpp 文件导致的。网上很多博客上写使用moc命令来解决,但是这样的话,如果多人开发的话,在你电脑上能变过,moc_XXXX.cpp我们一般都不提交,那么别人有可能也会遇到这种情况。那咱们来找一下造成这种现象的原因吧,这样一次解决就ok了。 咱们先打开工程对应的xxxx.vcxpr...

逝水流年 1万+

2025年再论 SAP ABAP 系统经典的三层架构的理解

【摘要】本文基于作者19年SAP开发经验,深入解析SAP经典三层架构在S/4HANA时代的演进与实践。数据库层从多数据库支持转向HANA专属,通过SQLScript实现计算下推;应用层以ABAP平台为核心,融合OData和RAP等现代开发范式;表现层从SAP GUI过渡到Fiori Launchpad为主导。文章通过真实案例(如月末关账优化、ATP检查改造)展示三层协作如何提升性能,并探讨了本地/云/混合部署策略。全文贯穿SAP官方技术文档参考,为开发者提供体系化架构认知和实践指导。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 755

QT+VS2022 LNK2001: 无法解析的外部符号 “public: static struct QMetaObject const XXX::staticMetaObject@@B

VS2022 + QT5 出现 LNK2001 无法解析的外部符号 QMetaObject 的问题

m0_38036750的博客 6262

基于Python的房地产评估数据抓取与分析 —— 房价走势与市场报告

在房地产行业中,了解和分析房产价格的变化趋势、各个地区的房价差异以及市场评价报告,可以帮助投资者、购房者以及政策制定者做出更加明智的决策。本文介绍了如何使用Python爬虫技术抓取房地产平台上的房产评估报告、价格走势等数据,并对抓取的数据进行分析。通过这些技术,您可以自动化抓取房地产平台的数据,分析房价走势,获取市场报告,为房地产投资决策提供数据支持。假设我们要从链家网抓取某个房产的价格、房产描述以及历史成交价格,首先需要获取目标房产页面的URL,并发送HTTP请求。伪装为常见浏览器,避免被识别为爬虫。

2201_76125261的博客 846

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

QT5+VS LNK2001: 无法解析的外部符号 “public: static struct QMetaObject

问题描述 在VS下开发Qt,自己新建h头文件和CPP源文件,在h文件中实现了继承某个QT类的自定义类,但是编译链接的时候报错 解决方法 添加头文件到工程,右击该文件,点击编译,然后再编译工程即可。 参考文章: 在使用QT + VS2005编译程序时,有时出现如下错误: 错误 1 error LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject const * __thiscall Widget::metaObject(void)const

EmbeddedCoder 的优快云博客 2719

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

vs2010+qt4编译出现error LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject等错误

1、当vs2010编译qt时会出现以下错误:            1>------ 已启动全部重新生成: 项目: MyDialog, 配置: Debug Win32 ------            1>生成启动时间为 2015/9/9 14:57:04。            1>InitializeBuildStatus:            1>  正在创建“Debug\MyD

sxj的专栏 5万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

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

我从QObject继承了一个类: #ifndef MAINWINDOWPRIVATE_H #define MAINWINDOWPRIVATE_H #include "DockManager.h" class MainWindowPrivate : public QObject { Q_OBJECT public: MainWindowPrivate(); virtual ~MainWindowPrivate(); public: void initDockWidge

$firecat利白的代码足迹$ 9822

error LNK2001: 无法解析的外部符号 “public: virtual struct QMetaObject const *

error LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject const *(VS2019 + Qt)

weixin_43898893的博客 2448

QT4 error LNK2001: 无法解析的外部符号

转自:http://blog.youkuaiyun.com/bloodkain/article/details/7614224 首先这个故事发生的环境是  QT+VS2008 然后是引用别人的文章 http://hi.baidu.com/%BC%BC%CA%F5%B2%BB%CA%C7%B7%B9%CD%EB/blog/item/bb22fb25fc3c552bc9955923.

wyn_HELLOWORLD的专栏 1123

QT+VS2008编译出现errorLNK2001:无法解析的外部符号

若出现如下错误: 错误 1 error LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject const * __thiscall Widget::metaObject(void)const " (?metaObject@Widget@@UBEPBUQMetaObject@@XZ)  错误 2 error LNK2001: 无法解析的

三少GG 3803

VS+QT报错error LNK2001: 无法解析的外部符号 public: virtual void * __cdecl CFileManager::qt_metacast(char const

描述:在VS项目头文件一开始没有添加QT信号槽机制,后续需要添加时继承QObject并声明Q_OBJECT宏,生成了moc文件仍然出现报错 error LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject const * __cdecl MainWindow::metaObject(void)const “ error LNK2001: 无法解析的外部符号 "public: virtual void * __cdecl MainWindow::qt_

weixin_42210846的博客 6653

VC+QT编译问题:error LNK2001: 无法解析的外部符号 “public: virtual int __cdecl *****::qt_metacall

1>TDRRGenerator.obj : error LNK2001: 无法解析的外部符号 "public: virtual int __cdecl TDRRGenerator::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@TDRRGenerator@@UEAAHW4Call@QMetaObject@@HPEAPEAX@Z) 1>TDRRGenerator.obj : error LNK2001: 无法解析的外

qq_37806107的博客 3759
上一篇: [Linux - Ubuntu] Ubuntu 密码输入
下一篇: [matlab] matlab 画直方图
bbbbbbj
博客等级 码龄18年 9粉丝 36原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值