Unreal Engine C++编译报错C4458:声明'item'隐藏类成员如何修复?
错误原因
C4458是作用域命名冲突错误,触发原因是内层作用域的标识符和外层类/结构体的成员重名,内层的名字会隐藏外层的成员。
你代码里的具体冲突点:
- 第34行
FInventoryItem结构体中已经定义了名为item的成员变量:TSubclassOf<class AItem> item; - 第45行的
==运算符重载函数,传入的参数也命名为item,二者重名触发错误。
Visual Studio智能感知未报错是因为它对UnrealHeaderTool的规则检测覆盖不全,这类命名冲突只有Unreal自身的编译流程会严格拦截。
修复方案(二选一即可,推荐方案1)
方案1:修改运算符重载的参数名,避免重名
把operator==的参数名修改为不冲突的名称(比如Other、OtherItem),修改后的代码如下:
bool operator==(const FInventoryItem& OtherItem) const { if (itemId == OtherItem.itemId) return true; else return false; } // 也可以简化为单句写法 // bool operator==(const FInventoryItem& OtherItem) const { return itemId == OtherItem.itemId; }
方案2:显式添加this->区分作用域
如果不想修改参数名,也可以在访问结构体自身成员时显式加this->明确作用域,不过可读性不如方案1:
bool operator==(const FInventoryItem& item) const { if (this->itemId == item.itemId) return true; else return false; }
修改后重新编译即可解决报错。
内容的提问来源于stack exchange,提问作者Alli
相关产品推荐
相关产品推荐

