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

在Qt5.8.0环境下编译Qt5.5.1工程时,未生成moc_XXX.cpp导致找不到QMetaObject。解决方法是在.pro文件中正确添加.h文件,并通过qtcreator重新编译。

由于要统一Qt版本和整理代码,我在Qt5.8.0上构建Qt5.5.1的工程,把源代码和资源文件移过来后编译出现标题所示的提示。

在网上搜了半天后发现,这是因为没有生成moc_XXX.cpp,原来我只是在.pro文件里加了个包含路径,而没有把.h文件写到.pro工程文件里,虽然编译能通过但是不会生产moc_XXX.cpp,也就无法找到QMetaObject。

qtcreator里右击项目 选择 添加现有文件,将这些 头文件添加然后重新编译即可。

编译时出现 `error LNK2001: 无法解析外部符号 "public: virtual struct QMetaObject const * __cdecl CBaseData::metaObject(void)const"` 问题,可能与大量文件无法自动生成moc文件有关。以下是一些可能的解决办法: #### 检查moc文件生成情况 若生成对应文件的moc_xxx文件默认位置不对,可把生成的新文件放到对应Generated Files下覆盖旧的moc_xxx文件,同时在Generated Files筛选器下加载该moc_xxx文件 [^1]。 #### 手动指定moc编译 对于每个需要生成moc文件的头文件,指定使用moc进行编译。选择相应的头文件,右键选择“属性” -> “配置属性” -> “常规” -> “项类型”,选择“自定义生成工具”;点击“应用”,左边导航树中会新增“自定义生成工具”条目,展开后选择“常规”,填写属性内容,命令行如`C:\Qt\5.15.2\msvc2019_64\bin\moc.exe “%(FullPath)” -o “moc_%(Filename).cpp”` ,说明为`optional`,输出为`moc_%(Filename).cpp`,向项类型添加输出选`C/C++ 编译器` [^2][^4]。 #### 检查项目配置文件 在项目配置文件中,确保有对应头文件的moc配置。例如在相关配置文件中添加: ```xml <ItemGroup> <QtMoc Include="CBaseData.h" /> </ItemGroup> ``` ### 示例代码 ```cpp // CBaseData.h #include <QObject> class CBaseData : public QObject { Q_OBJECT public: CBaseData(QObject *parent = nullptr); ~CBaseData(); }; // CBaseData.cpp #include "CBaseData.h" CBaseData::CBaseData(QObject *parent) : QObject(parent) { } CBaseData::~CBaseData() { } // 如果有必要,在cpp文件末尾添加下面这行 #include "moc_CBaseData.cpp" ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值