【问题标题】:Referencing Enum C++ Unreal引用枚举 C++ Unreal
【发布时间】:2020-09-12 15:16:12
【问题描述】:

我在 Unreal C++ 中创建了一个枚举类

#include "GroundDirection.generated.h"

UENUM(BlueprintType)
enum UGroundDirection
{
     BOTTOM = 0,
     LEFT = 1,
     TOP = 2,
     RIGHT = 3
};

在 C# 或 Java 中,我可以实例化此 Enum 的副本,执行如下操作:

GroundDirection groundDirection = GroundDirection.BOTTOM;

我想我可以用 Unreal C++ 做类似的事情

UGroundDirection groundDirection = UGroundDirection.BOTTOM;

但是,当我这样做时,我收到以下错误:

错误 C2228:'.BOTTOM' 左侧必须有类/结构/联合

鉴于此错误,我如何实例化枚举?

【问题讨论】:

  • U 用于 UObjects,E 用于枚举。

标签: c++ enums unreal-engine4 unreal-development-kit


【解决方案1】:

BOTTOM 不是一个类,而是一个整数。此外,UGroundDirection 不是类/结构/联合,而是enum,因此它被视为命名空间。你应该使用:: 而不是.

要解决您的问题,您只需从 UGroundDirection groundDirection = UGroundDirection.BOTTOM; 中删除 UGroundDirection 并将其替换为:int groundDirection = UGroundDirection::BOTTOM

就是这样!

【讨论】:

  • 最好不要使用int。 UGroundDirection groundDirection = UGroundDirection::BOTTOM;完全没问题,适合新的枚举类语法。
  • @AlexZaharov 两者实际上都可以完美运行,而且我不会因为使用其中任何一个而感到不便。但总的来说,int 用于从enum 中提取数据
  • 这种方式被认为是旧的。将 int 和 enum 混合在一起,这就是引入“枚举类”的原因。在新项目中,我做枚举类来强制停止隐藏的转换。使用优化编译器(任何新的)时,它会产生更多问题然后解决。我可以想象逻辑会崩溃的情况。例如, int 在 8 位或 16 位机器(微控制器)上是 16 位的,而枚举常量可能有很大的值。无论如何,我的观点是,最好避免将这种虚假的便利作为没有真正需要的良好做法。
  • @AlexZaharov 在这种情况下我同意你的看法。
  • 但同时使用是正确的。但是,如果你真的想整体使用int,我建议使用int32_tint64_t
【解决方案2】:

我在 Unreal C++ 中创建了一个枚举类

不,你没有。您刚刚创建了一个 C 风格的枚举。
此外,UE++ coding standard 声明枚举应该有一个 E 作为前缀。

所以你的声明实际上应该是这样的:

#include "GroundDirection.generated.h"

UENUM(BlueprintType)
enum class EGroundDirection
{
     BOTTOM = 0,
     LEFT = 1,
     TOP = 2,
     RIGHT = 3
};

要访问枚举的成员,您可以像访问类的静态成员一样访问它们:

EGroundDirection direction = EGroundDirection::BOTTOM;

这是因为您访问的不是实例的成员,而是在 C++ 中始终使用 :: 完成的声明。

【讨论】:

    猜你喜欢
    • 2011-10-17
    • 1970-01-01
    • 1970-01-01
    • 2010-11-26
    • 2010-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多