我正在尝试构建我的虚幻引擎 5 项目的解决方案,该解决方案由多个代码模块组成,其中两个是
CelBody
和 OrbitSuite
。这些模块的结构符合 Epic Games 的建议(私有文件夹和公共文件夹分别包含 .cpp 和 .h 文件)。 OrbitSuite
是 CelBody
的私有依赖项,因为它包含一个名为 FBodyData
的数据结构,它是 ACelBody
actor 类成员属性之一的类型。
OrbitSuite 和 CelBody 模块文件夹位于我的 Unreal 项目的同一源目录中,并且 #includes 拼写正确,并且 IntelliSense 显示关于丢失标头或未解析成员的零问题。在 CelBody.Build.cs 中,OrbitSuite 包含在 PrivateDependencyModuleNames 字符串列表中,该列表自上次项目成功编译以来未经编辑。
当我尝试编译时,LNK2019 错误显示:
LNK2019: unresolved external symbol "public: __cdecl FBodyData::FBodyData(void)" (??0FBodyData@@QEAA@XZ) referenced in function "public: __cdecl ACelBody::ACelBody(class FVTableHelper &)" (??0ACelBody@@QEAA@AEAVFVTableHelper@@@Z)
查找错误代码,它显然表示“当头文件中存在声明,但没有实现匹配的定义时”,在这种情况下,指的是
FBodyData
的默认构造函数,因为它由声明调用FBodyData BodyData
的类定义中的成员 ACelBody
。我已经四次检查了 BodyData.h 和 BodyData.cpp,并且默认构造函数已正确定义和实现。
我希望编译器在定位
FBodyData()
的实现时不会出现问题,并且担心错误可能是由不相关的东西引起的。让我知道是否有日志提供会很有帮助,或者是否需要有关文件结构或类实现的更多详细信息。
由于您没有提供任何代码,我只能猜测,但您可能忘记导出类以在另一个模块中使用它们。
// <ModuleName>_API is defined as platform-specific DLL export directives by UBT.
class CELBODY_API FBodyData
{
FBodyData() = default;
};