c++ 如何在构造函数中使用参数?

ukqbszuj  于 2023-01-10  发布在  其他
关注(0)|答案(1)|浏览(266)

我正在用ue5编程,我正在创建一个空间散列。我需要为散列声明一个像元大小,我决定使用构造函数
下面是一个类似的代码

  • HS空间散列.h*
UCLASS()
class xxx_API UHSpatialHash final : public UObject
{
    GENERATED_BODY()
public:
    explicit UHSpatialHash(const float PCellSize) {CellSize = PCellSize;}
}

错误信息:

error C:\Users\user\OneDrive\Documents\Unreal Projects\attrition\Source\project name\Private\HSpatialHash.h(18):
error C2338: static_assert failed: 'You have to define UHSpatialHash::UHSpatialHash() or UHSpatialHash::UHSpatialHash(const FObjectInitializer&). 
This is required by UObject system to work correctly.'

我试着添加FObjectInitializer参数,但是没有用。我试着在cpp文件里放进去,什么都没有,我不知道该怎么做。你能帮我吗?

zf9nrax1

zf9nrax11#

如果继承自UObject,则必须提供默认构造函数或带FObjectInitializer参数的构造函数。使用NewObject()创建对象,NewObject()为对象执行一些内部初始化逻辑,并且不能向其传递参数。
我决定使用构造函数
根据你想做什么,你可能应该改变你的决定。
你需要它是一个具有反射和编辑器可见性的UObject吗?因为那样的话,只需要添加一个“Initialize()”方法,并在创建后调用它,这样会更容易:

UCLASS()
class xxx_API UHSpatialHash final : public UObject
{
    GENERATED_BODY()
public:
    inline void Initialize(const float PCellSize) { CellSize = PCellSize; }
}

和创作:

UHSpatialHash* spatialHash = NewObject<UHSpatialHash>(this);
spatialHash->Initialize(cellSize);

如果你只想让它成为一个简单的类而不需要反射,你可以只使用一个常规的C++类和你的定制构造函数。
另一种选择是使用USTRUCT()。它不能像UCLASS()那样做很多事情,但是因为你不打算从它继承,所以它可能足够了。你可以定义一个自定义构造函数,而不需要关心FObjectInitializer参数。

相关问题