在C ++ / Unreal Engine 4中访问不同类中的静态变量

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在C ++ / Unreal Engine 4中访问不同类中的静态变量相关的知识,希望对你有一定的参考价值。

我有一个在头文件中声明的静态变量,并在相应的cpp文件中初始化。我想要做的是从另一个cpp文件访问该变量。这是代码:

AkOcclusionObstructionService.h

class AkOcclusionObstructionService
{
public:

    static float OcclusionFadeRate;
    ...
}

AkOcclusionObstructionService.cpp

...
float AkOcclusionObstructionService::OcclusionFadeRate = 3.0f;
...

MyBlueprintFunctionLibrary.cpp

#include "MyBlueprintFunctionLibrary.h"
#include "AkOcclusionObstructionService.h"

void UMyBlueprintFunctionLibrary::ChangeWwiseFadeRate(float rate)
{
    AkOcclusionObstructionService::OcclusionFadeRate = rate;
}

当我尝试构建Visual Studio时给出了这个错误:

“LNK2001未解析的外部符号”public:static float AkOcclusionObstructionService :: OcclusionFadeRate“(?OcclusionFadeRate @ AkOcclusionObstructionService @@ 2MA)”。

看起来MyBlueprintFunctionLibrary看不到AkOcclusionObstructionService cpp文件中的OcclusionFadeRate变量。

任何人都知道发生了什么?

提前致谢!

编辑:其他链接/建筑信息:

要使“AkOcclusionObstructionService.h”文件对“MyBlueprintFunctionLibrary.cpp”文件可见,我们必须向“TestFadeRateWwise2.build.cs”添加一些内容(TestFadeRateWwise2是项目名称)。具体来说,我们不得不在这一行添加“AKAUDIO”:

PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "HeadMountedDisplay", "AKAUDIO" });

这是我们做过的唯一“非标准”事情。

答案

根据您发布的代码很难判断,但我认为问题是因为下面的行在函数内:

float AkOcclusionObstructionService::OcclusionFadeRate = 3.0f;

将该行移到函数外部并再次尝试。你可以看看这个问题:How to access static members of a class?

以上是关于在C ++ / Unreal Engine 4中访问不同类中的静态变量的主要内容,如果未能解决你的问题,请参考以下文章

Tim Sweeney解释为什么Unreal Engine 4全面转向C++

unreal engine 安卓打包失败

实例甜点 Unreal Engine 4迷你教程之函数中的静态变量

Unreal Engine 4---学习文档

Unreal Engine 4 优化教程

Unreal Engine 4 Tips