You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在FSlotStructure类型TArray中查找结构索引 解决C2678报错

错误原因说明

你遇到的C2678报错核心是TArray<FSlotStructure>::Find()方法依赖类型的相等判断逻辑,而你自定义的FSlotStructure结构体没有实现合法的==运算符重载。
TArray的Find方法内部会遍历数组,将每个元素和传入的查找目标做==比较,而UE的自定义USTRUCT默认不会生成相等判断逻辑,需要你手动实现,且必须支持常量实例调用,和报错提示里的const FSlotStructure左操作数要求匹配。

修复步骤

1. 给FSlotStructure添加==运算符重载

在FSlotStructure的结构体定义内添加如下代码,替换为你自己的相等判断逻辑即可:

bool operator==(const FSlotStructure& Other) const
{
    // 示例:判断两个槽的道具ID、空槽状态一致即视为相等,可按实际需求修改
    return ItemId == Other.ItemId && bIsEmpty == Other.bIsEmpty;
}

注意函数末尾必须加const修饰,否则常量实例调用时会无法匹配到该运算符,依然触发相同报错。

2. 优化现有代码逻辑

你当前写的CreateStack函数存在逻辑问题:遍历数组的同时调用Find+Insert会动态修改数组长度,大概率触发死循环,且遍历过程中已经可以直接判断槽位状态,不需要额外调用Find,参考优化实现:

void UInventoryComponent::CreateStack(FSlotStructure& ContentToAdd)
{
    // 遍历查找空槽直接填充
    for (int32 Index = 0; Index < Inventory.Num(); ++Index)
    {
        if (Inventory[Index].bIsEmpty) // 替换为你自己的空槽判断逻辑
        {
            Inventory[Index] = ContentToAdd;
            return;
        }
    }
    // 无空槽时追加到数组末尾
    Inventory.Add(ContentToAdd);
}

内容的提问来源于stack exchange,提问作者neoluna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 19:48:02