将Unity的A*寻路Node脚本迁移到Unreal时出现构造函数报错如何解决?
问题原因
你遇到的报错核心是构造函数命名和结构体名称不匹配:
- C++要求类/结构体的构造函数名称必须和自身类型名称完全一致,你定义的UE结构体名称是
FAS_Node,但写的构造函数名称是Node - 编译器会把名称不符的
Node()识别为普通成员函数,普通函数必须声明返回类型,因此触发了「Node没有返回类型」的报错
解决步骤
- 将构造函数的名称修改为和结构体完全一致的
FAS_Node - 补充UE结构体要求的无参默认构造函数,避免虚幻头文件工具编译报错
- 可选:给属性添加默认初始化值,避免出现未初始化的野值
修改后的正确代码
USTRUCT(BlueprintType) struct FAS_Node { GENERATED_USTRUCT_BODY() UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Nodes") FVector worldPosition = FVector::ZeroVector; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Nodes") bool walkable = false; // UE USTRUCT要求的无参默认构造函数 FAS_Node() = default; // 对应Unity版本的带参构造函数 FAS_Node(bool _walkable, FVector _worldPos) { walkable = _walkable; worldPosition = _worldPos; } };
额外注意点
- 如果使用UE5及以上版本,可以把
GENERATED_USTRUCT_BODY()替换为GENERATED_BODY(),后者是新版UE推荐的通用写法 - 如果你不需要在蓝图中操作这个结构体,可以去掉
BlueprintType、BlueprintReadWrite等宏,仅保留C++层面的逻辑即可
内容的提问来源于stack exchange,提问作者KHAIRUL AZANNI AMRAN
相关产品推荐
相关产品推荐

