编译模块化 UE5 C++ 源代码时出现多个 LNK2019 和 LNK2001“无法解析的外部符号”错误

问题描述 投票:0回答:1

我正在尝试构建我的虚幻引擎 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()
的实现时不会出现问题,并且担心错误可能是由不相关的东西引起的。让我知道是否有日志提供会很有帮助,或者是否需要有关文件结构或类实现的更多详细信息。

c++ unreal-engine5 unresolved-external
1个回答
0
投票

由于您没有提供任何代码,我只能猜测,但您可能忘记导出类以在另一个模块中使用它们。

// <ModuleName>_API is defined as platform-specific DLL export directives by UBT.
class CELBODY_API FBodyData
{
    FBodyData() = default;
};
© www.soinside.com 2019 - 2024. All rights reserved.