UE5.2插件编译报错:已删除函数无法引用(黑板组件相关)
解决Unreal Engine 5.2自定义插件编译报错:删除函数无法引用
问题原因
从提供的FBlackboard代码来看,UE5.2默认使用自定义的FBlackboard::FKey结构体(而非旧版的uint8),该结构体明确删除了**FKey(uint8)构造函数和operator uint8()转换运算符**。报错的核心是:你尝试将UBlackboardComponent::GetKeyID返回的FKey类型,直接赋值给uint16或其他基础类型,编译器在隐式转换过程中试图调用被删除的函数。
解决方案
1. 使用正确的变量类型
将targetActorKey的类型声明为FBlackboard::FKey,而非uint16或uint8:
// 正确声明变量 FBlackboard::FKey targetActorKey = BBComponent->GetKeyID("TargetActor");
2. 若需转换为uint16(显式转换)
如果业务逻辑确实需要将FKey转为uint16,使用显式类型转换(结构体已重载operator uint16(),允许合法转换):
FBlackboard::FKey targetActorKey = BBComponent->GetKeyID("TargetActor"); uint16 keyAsUint16 = static_cast<uint16>(targetActorKey);
3. 排查潜在的uint8转换
检查代码中所有涉及FKey的地方,确保没有尝试将其隐式或显式转换为uint8——这会直接触发删除函数的报错。
验证代码示例
修正后的完整调用代码:
// 初始化黑板(原代码无需修改) BBComponent = CreateDefaultSubobject<UBlackboardComponent>(TEXT("BlackBoardComp")); UBlackboardData* const bbData = BehaviorTree->BlackboardAsset; BBComponent->InitializeBlackboard(*bbData); // 获取黑板键的正确方式 FBlackboard::FKey targetActorKey = BBComponent->GetKeyID("TargetActor"); // 如需转为uint16,显式转换 uint16 keyUint16 = static_cast<uint16>(targetActorKey);
内容的提问来源于stack exchange,提问作者matheus
相关产品推荐
相关产品推荐

