Поделиться через


Ошибка компилятора C2243

Преобразование conversion type из type1 в type2 существует, но недоступно

Защита доступа (protected или private) не позволила выполнить преобразование из указателя на производный класс в указатель на базовый класс.

Следующий пример приводит к возникновению ошибки C2243:

// C2243.cpp
// compile with: /c
class B {};
class D : private B {};
class E : public B {};

D d;
B *p = &d;   // C2243

E e;
B *p2 = &e;

Базовые классы с типом доступа protected или private недоступны клиентам производного класса. Эти уровни контроля доступа используются для обозначения того, что базовый класс в реализации должен быть невидим для клиентов. Используйте открытое наследование, чтобы у клиентов производного класса был доступ к неявному преобразованию указателя на производный класс в указатель на базовый класс.