Ошибка: преобразование из производного * в базовое & - PullRequest
1 голос
/ 01 апреля 2011

Хотя я сделал членов как базовых, так и производных классов public, почему преобразование говорит, что оно недоступно?

class B 
{
public:
   int var;
};


class D: private B
{
public:
   int var;
};


int main()
{
   D d;
   Base &b = d; //my error
}

Ответы [ 2 ]

1 голос
/ 01 апреля 2011

Вы не можете преобразовать производный класс в закрытый базовый класс (ну, в любом случае, вне самого класса). Частное наследование обычно используется как форма композиции, а не для подстановки, поэтому нет необходимости преобразовывать в базу. В вашем случае это выглядит так, как будто вы хотите заменить, поэтому вы должны использовать публичное наследование.

0 голосов
/ 01 апреля 2011

Попробуйте:

#include <iostream>

class B 
{
public:
   int var;
};


class D: public B
{
public:
   int var;
};


int main()
{
   D d;
   B &b = d; //my error
}

То, что вы пытаетесь сделать, не будет работать с частным наследованием.Также обратите внимание, что ваш базовый класс известен как B, а не Base.

С уважением,Деннис М.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...