我正在用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文件里放进去,什么都没有,我不知道该怎么做。你能帮我吗?
1条答案
按热度按时间zf9nrax11#
如果继承自UObject,则必须提供默认构造函数或带
FObjectInitializer
参数的构造函数。使用NewObject()创建对象,NewObject()为对象执行一些内部初始化逻辑,并且不能向其传递参数。我决定使用构造函数
根据你想做什么,你可能应该改变你的决定。
你需要它是一个具有反射和编辑器可见性的
UObject
吗?因为那样的话,只需要添加一个“Initialize()”方法,并在创建后调用它,这样会更容易:和创作:
如果你只想让它成为一个简单的类而不需要反射,你可以只使用一个常规的C++类和你的定制构造函数。
另一种选择是使用
USTRUCT()
。它不能像UCLASS()
那样做很多事情,但是因为你不打算从它继承,所以它可能足够了。你可以定义一个自定义构造函数,而不需要关心FObjectInitializer
参数。