不允许转换为无法访问的基类[重复]

Posted

技术标签:

【中文标题】不允许转换为无法访问的基类[重复]【英文标题】:conversion to inaccessible base class is not allowed [duplicate] 【发布时间】:2018-04-14 05:24:34 【问题描述】:

我首先定义了一个类 B1 和一个派生类 D1。然后我想定义对 B1 的引用并将其初始化为我刚刚定义的 D1 对象。出现错误,说“不允许转换为无法访问的基类'B1'”,我不知道为什么。

#include "std_lib_facilities.h"

class B1 
public:
    virtual void vf()  cout << "B1::vf()\n"; ;
    void f()  cout << "B1::f()\n"; ;
;

class D1 :B1 
public:
    void vf()  cout << "D1:vf()\n"; ;
    void f()  cout << "D1::f()\n"; ;
;




int main()

    B1 b1;
    b1.vf();
    b1.f();

    D1 d1;
    d1.vf();
    d1.f();

    B1& db=d1;//error

    keep_window_open();
    return 0;

【问题讨论】:

您的意思是让B1 成为私人基地吗?如果不是,则设置为class D1 : public B1 ...; 如果是,则错误消息是正确且预期的 - 私有继承的全部意义在于使基类无法访问。 【参考方案1】:
class D1 :B1

类的继承默认是private,你应该设为public

class D1 : public B1

【讨论】:

以上是关于不允许转换为无法访问的基类[重复]的主要内容,如果未能解决你的问题,请参考以下文章

C++ VS代码爆红:不允许对不可访问的基类进行转换(子类继承父类时必须加上继承属性,比如public)

C++ VS代码爆红:不允许对不可访问的基类进行转换(子类继承父类时必须加上继承属性,比如public)

C++ VS代码爆红:不允许对不可访问的基类进行转换(子类继承父类时必须加上继承属性,比如public)

我无法访问我的基类的受保护成员

无法访问基类中的受保护成员 [重复]

C#:基类中的受保护方法;无法使用来自另一个类的派生类对象进行访问[重复]