正确解决error LNK2019: 无法解析的外部符号 “public: __thiscall MyClass(void)异常的有效解决方法

正确解决error LNK2019: 无法解析的外部符号 "public: __thiscall MyClass(void)异常的有效解决方法

报错问题

error LNK2019: 无法解析的外部符号 "public: __thiscall MyClass(void)

报错原因

错误 LNK2019: 无法解析的外部符号 在Visual Studio的C++项目中出现时,通常意味着编译器在链接阶段找不到某个函数或对象的实现。具体到您的错误信息 “public: __thiscall MyClass(void)”,这意味着编译器找不到类 MyClass 的默认构造函数的实现。

下滑查看解决方法

解决方法

1>libqrencode.lib(qrencode.obj) : 找到 MSIL .netmodule 或使用 /GL 编译的模块;正在使用 /LTCG 重新启动链接;将 /LTCG 添加到链接命令行以改进链接器性能 1>DrawModeCheckDialog.obj : error LNK2001: 无法解析外部符号 "public: virtual struct QMetaObject const * __thiscall DrawModeCheckDialog::metaObject(void)const " (?metaObject@DrawModeCheckDialog@@UBEPBUQMetaObject@@XZ) 1>DrawModeCheckDialog.obj : error LNK2001: 无法解析外部符号 "public: virtual void * __thiscall DrawModeCheckDialog::qt_metacast(char const *)" (?qt_metacast@DrawModeCheckDialog@@UAEPAXPBD@Z) 1>DrawModeCheckDialog.obj : error LNK2001: 无法解析外部符号 "public: virtual int __thiscall DrawModeCheckDialog::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@DrawModeCheckDialog@@UAEHW4Call@QMetaObject@@HPAPAX@Z) 1>NCApplication.obj : error LNK2001: 无法解析外部符号 "public: virtual struct QMetaObject const * __thiscall NCApplication::metaObject(void)const " (?metaObject@NCApplication@@UBEPBUQMetaObject@@XZ) 1>NCApplication.obj : error LNK2001: 无法解析外部符号 "public: virtual void * __thiscall NCApplication::qt_metacast(char const *)" (?qt_metacast@NCApplication@@UAEPAXPBD@Z) 1>NCApplication.obj : error LNK2001: 无法解析外部符号 "public: virtual int __thiscall NCApplication::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@NCApplication@@UAEHW4Call@QMetaObject@@HPAPAX@Z) 1>NCApplication.obj : error LNK2001: 无法解析外部符号 "public: static struct QMetaObject const NCApplication::staticMetaObject" (?staticMetaObject@NCApplication@@2UQMetaObject@@B) 1>sliderStepButton.obj : error LNK2001: 无法解析外部符号 "public: virtual struct QMetaObject const * __thiscall sliderStepButton::metaObject(void)const " (?metaObject@sliderStepButton@@UBEPBUQMetaObject@@XZ) 1>sliderStepButton.obj : error LNK2001: 无法解析外部符号 "public: virtual void * __thiscall sliderStepButton::qt_metacast(char const *)" (?qt_metacast@sliderStepButton@@UAEPAXPBD@Z) 1>sliderStepButton.obj : error LNK2001: 无法解析外部符号 "public: virtual int __thiscall sliderStepButton::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@sliderStepButton@@UAEHW4Call@QMetaObject@@HPAPAX@Z) 1>E:\lyf-Qt\laser\QtVisionLaser\Win32\Debug\\LaserVision.exe : fatal error LNK1120: 10 个无法解析外部命令 怎么查看哪些头文件需要手动编译
06-22
<think>嗯,用户遇到了LNK2019 unresolved external symbol的错误,具体是CCommunicateWithBD::runFlagChanged(bool)这个符号无法解析。我需要根据之前的经验和提供的引用信息来思考解决方案。 首先,LNK2019通常是因为编译器知道某个函数或变量的声明,但链接器找不到它的定义。根据用户提供的引用[1]、[2]、[3],常见的错误原因包括未实现的成员函数、头文件未正确包含、构建系统未更新、命名空间或作用域错误,以及动态信号槽的问题,尤其是在Qt项目中。 用户提到错误涉及CCommunicateWithBD类的runFlagChanged(bool)函数。可能的情况是,这个函数在头文件中声明了,但没有在源文件中实现。或者,如果是信号,可能在Qt中忘记使用Q_OBJECT宏,或者在元对象系统中有问题。用户可能在Qt Creator中添加了新的类或函数,但在切换到VS2019时没有重新生成构建文件,导致链接器找不到新的实现。 需要检查几个方面:首先确认函数是否在.cpp文件中实现,其次检查头文件是否被正确包含,是否有拼写错误,特别是参数类型是否一致。另外,在Qt项目中,可能需要重新运行qmake来更新Makefile,或者清理并重新构建项目。如果使用了信号槽,确保元对象系统正确生成代码,可能需要删除moc文件并重新编译。此外,检查命名空间是否正确,或者是否存在多重定义的符号。 另外,用户之前在VS2019中运行项目,而代码是在Qt Creator中修改的,可能存在构建系统不同步的问题。这时候需要确保VS的项目文件也被更新,或者需要手动触发重新生成解决方案。此外,检查函数是否为虚函数但未在子类中正确覆盖,或者是否在类外定义时遗漏了类名作用域。 总结可能的解决步骤:检查函数实现是否存在,确认参数类型是否匹配,重新生成构建系统,处理Qt元对象的问题,检查命名空间和类作用域,清理并重新编译项目。可能需要用户逐步排查这些可能性,找到具体原因。</think>### LNK2019无法解析外部符号解决方案 您遇到的$CCommunicateWithBD::runFlagChanged(bool)$符号解析错误,本质是链接器无法找到该成员函数的实现。根据引用[3]的Qt项目场景和您的开发环境特点,建议按以下步骤排查: 1. **基础检查** - 确认.cpp文件中存在**完整函数实现**: ```cpp // CCommunicateWithBD.cpp中必须包含 void CCommunicateWithBD::runFlagChanged(bool flag) { // 具体实现 } ``` - 检查函数签名是否**完全一致**(例如$bool$参数是否写成$int$) - 验证头文件包含关系(确保使用该函数的文件包含了$CCommunicateWithBD.h$) 2. **Qt项目特殊处理** - 若涉及信号/槽: ```cpp // 声明信号时必须使用signals:区域且不带实现 class CCommunicateWithBD : public QObject { Q_OBJECT // 必须添加该宏 signals: void runFlagChanged(bool); }; ``` - 执行**qmake重新生成Makefile**(Qt Creator菜单栏→构建→执行qmake) - 删除**moc_*.cpp**等中间文件后重新编译(引用[3]的错误多与元对象系统相关) 3. **VS2019环境同步** - 在VS中执行**清理解决方案→重新生成** - 检查.vcxproj文件是否包含新增的.cpp文件(右键项目→添加→现有项) - 若使用Qt VS Tools,验证Qt版本配置是否匹配当前项目 4. **进阶排查(适用于复杂场景)** - 使用**Dependency Walker**工具分析符号导出情况 - 检查类定义中是否误用$=0$纯虚函数声明 - 验证动态链接库项目中是否正确定义了__declspec(dllexport) **典型修复案例**: 某开发者在Qt Creator新增$testDialog$类后未同步VS工程文件,导致构造函数和析构函数出现LNK2019错误(如引用[3])。通过手动将新类.cpp文件添加到VS项目,并执行完整重新编译后解决
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值