【问题标题】:Access static variable in a different class in C++/Unreal Engine 4在 C++/虚幻引擎 4 中访问不同类中的静态变量
【发布时间】:2018-03-06 16:30:27
【问题描述】:

我在头文件中声明了一个静态变量,并在相应的 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" });

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

【问题讨论】:

  • 你展示的代码中没有任何东西本质上是错误的,所以错误一定出在你没有展示的代码或你编译它的方式上。
  • 这不是代码而是构建问题。您如何构建(或在您的案例中链接)您的代码?

标签: c++ static unreal-engine4


【解决方案1】:

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

float AkOcclusionObstructionService::OcclusionFadeRate = 3.0f;

将该行移出函数并重试。你可以看看这个问题:How to access static members of a class?

【讨论】:

  • 没有理由相信这是在函数中。我们被告知该行位于 AkOcclusionObstructionService.cpp 文件中。 OcclusionFadeRate = 速率; IS 在一个函数中,也许这就是你的意思。
【解决方案2】:

在 cpp 文件中 你应该这样做。

//.cpp
#include "MyBlueprintFunctionLibrary.h"
#include "AkOcclusionObstructionService.h"

//this line make this file to access the static parameter.
float AkOcclusionObstructionService::OcclusionFadeRate;

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-16
    • 1970-01-01
    • 2015-01-13
    • 2015-08-01
    • 2020-11-18
    • 2015-09-11
    • 2010-10-19
    • 2015-10-12
    相关资源
    最近更新 更多