【发布时间】:2019-01-02 14:10:29
【问题描述】:
我有一个库 VMSCore,它有 VMSObject::public QObject。 我实现了从 VMSObject 类继承的工厂类。 构建库后,我尝试将其链接到我的 exe 项目。 我得到链接错误:
严重性代码描述项目文件行抑制状态 错误 LNK2019 未解析的外部符号“public:virtual int __cdecl VMS::Factory::qt_metacall(枚举 QMetaObject::Call,int,void * *)" (?qt_metacall@Factory@VMS@@UEAAHW4Call@QMetaObject@@HPEAPEAX@Z) 在函数“public:virtual int __cdecl”中引用 VMS::Algorithm::Factory::qt_metacall(枚举 QMetaObject::Call,int,void * *)" (?qt_metacall@Factory@Algorithm@VMS@@UEAAHW4Call@QMetaObject@@HPEAPEAX@Z) CVFnVMSExperimental C:\Users\Matvey\cvfn\build\Products\CVFnVMS\mocs_compilation.obj 1
据我了解错误,我没有链接 moc 文件中定义的函数。 在 CMake 中链接 moc 创建的文件的正确方法是什么?
【问题讨论】:
-
你能在你的构建树中检查
mocs_compilation.cpp的内容吗?每个Q_OBJECT头文件应该包含一个#include。从您的错误消息来看,VMS::Factory似乎不包含Q_OBJECT声明。 -
命名空间 VMS { class Factory: public VMS::Object { Q_OBJECT 这就是我在 Factory 类中所拥有的。如果我将我的 Factory /.h 和 .cpp 文件放在实验性包含和实验性源中,一切都会正确编译。