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

C++多继承代码访问基类私有成员编译报错问题求助

问题根因

你的报错是C++类成员访问权限规则导致的,和头文件、多继承语法本身无关:

  • 类的private私有成员仅允许类自身的成员函数访问,派生类(哪怕是公有继承)、外部代码都没有直接访问权限
  • 你在派生类Derived的Display_Result成员函数里直接访问两个基类的私有成员Num1、Num2,自然触发编译报错

解决方案

这里提供两种符合C++规范的修改方案:

方案1:将基类私有成员改为保护成员protected

保护成员的特性是:类自身可访问,派生类可访问,外部不可访问,刚好匹配你的需求。修改对应基类的成员声明即可:

class BaseClass1
{
    protected: // 此处把private改成protected
        int Num1;
    public:
        void GetNumber(int);
};

class BaseClass2
{
    protected: // 此处把private改成protected
        int Num2;
    public:
        void GetNumber1(int);
};

修改后其余代码不变,即可正常编译运行。

方案2:为基类新增公有getter接口(更符合封装原则)

如果要严格遵循类封装规范,不对外暴露成员变量,可在基类中新增获取成员值的公有函数,派生类通过调用接口获取数值:

class BaseClass1
{
    private:
        int Num1;
    public:
        void GetNumber(int);
        int GetNum1() { return Num1; } // 新增getter接口
};

class BaseClass2
{
    private:
        int Num2;
    public:
        void GetNumber1(int);
        int GetNum2() { return Num2; } // 新增getter接口
};

再修改派生类的Display_Result函数,调用接口取值:

void Derived::Display_Result()
{
 cout<<"Num1"<<GetNum1()<<endl;
 cout<<"Num2"<<GetNum2()<<endl;
 cout<<"Result"<<(GetNum2()*GetNum1())<<endl;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 16:27:00