преобразование в недоступный базовый класс не допускается

Сначала я определяю класс 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;
}

person Cheng Lu    schedule 01.11.2017    source источник
comment
Вы хотели сделать B1 частной базой? Если нет, сделайте его class D1 : public B1 {...}; Если да, то сообщение об ошибке правильное и ожидаемое — весь смысл частного наследования в том, чтобы сделать базовый класс недоступным.   -  person Igor Tandetnik    schedule 01.11.2017


Ответы (1)


class D1 :B1

Наследование классов по умолчанию private, нужно сделать public:

class D1 : public B1
person Hatted Rooster    schedule 01.11.2017