Почему Base * pd = new Derived;сгенерировать ошибку? - PullRequest
1 голос
/ 19 декабря 2010

С учетом этого кода:

class Base{ 
public: 
    Base(); 
    virtual ~Base(); 
}; 

class Derived: protected Base{ 
public: 
    virtual ~Derived(); 
}; 

В основном я пытаюсь назначить производную базе следующим образом:

Base *pd = new Derived;

Почему этот оператор вызывает ошибку?

Здесь new вернет указатель типа объекта, и мы всегда можем назначить производный указатель для базы.Поправь меня, если я ошибаюсь.

Ответы [ 2 ]

9 голосов
/ 19 декабря 2010

Чтобы преобразовать указатель на один класс в указатель на другой тип класса, преобразование должно быть доступно в тот момент, когда оно вызывается.

Поскольку Base является защищенной базой Derived, вы не можете инициализировать переменную типа Base * из выражения new Derived (которое имеет тип Derived *) вне функции-члена Derived класс, производный от него, или friend из Derived.

0 голосов
/ 19 декабря 2010

Ошибка компоновщика может быть просто результатом пропуска реализаций для классов.Было бы полезно, если бы вы могли публиковать конкретные сообщения об ошибках.

...