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

访问C++类protected成员报错,如何正确访问保护成员变量?

问题原因

C++ 中protected修饰的类成员,仅允许三类对象访问:

  • 类自身的成员函数
  • 该类的派生类的成员函数
  • 被显式声明为友元的函数或类
    你当前的Component类不属于上述三类范畴,因此直接通过Item->Quantity访问受保护成员会触发权限报错。
可行解决方案

方案1:添加public getter方法(最推荐,符合封装规范)

在Item类的定义中新增公开的读接口,代码修改如下:

items.h 修改

protected:
    int32 Quantity;
// 新增public成员
public:
    int32 GetQuantity() const { return Quantity; }

component.cpp 修改

把访问Quantity的行替换为调用getter接口:

return ItemAddResult::AddedAll(Item->GetQuantity());

方案2:将Component声明为Item的友元(仅适合强关联业务场景)

如果Component和Item业务耦合度极高,确实需要频繁访问Item的受保护成员,可以在Item类定义中添加友元声明:

items.h 修改

class Item {
// 其他成员定义
protected:
    int32 Quantity;
// 新增友元声明
friend class Component;
};

注意:友元会破坏类的封装性,非必要不建议使用。

方案3:调整继承关系(仅符合业务设计时使用)

如果业务逻辑中Component本身就是Item的派生类,只需要修改类定义为继承关系即可天然获得protected成员的访问权限:

class Component : public Item {
// 类成员定义
};
额外注意

你当前代码中将参数名定义为Item,和类名重名,建议修改为InItem这类名称避免编译期的命名冲突问题。

内容的提问来源于stack exchange,提问作者Саша

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 04:36:04