Błąd kompilatora C2243

Konwersja "typ konwersji" z "type1" na "type2" istnieje, ale jest niedostępna

Ochrona dostępu (protected lub private) uniemożliwiła konwersję ze wskaźnika do klasy pochodnej do wskaźnika do wskaźnika do klasy bazowej.

Poniższy przykład generuje 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;

Klasy bazowe z dostępem protected lub private nie są dostępne dla klientów klasy pochodnej. Te poziomy kontroli dostępu służą do wskazywania, że klasa podstawowa jest szczegółem implementacji, który powinien być niewidoczny dla klientów. Użyj wyprowadzania publicznego, jeśli chcesz, aby klienci klasy pochodnej mieli dostęp do niejawnej konwersji wskaźnika klasy pochodnej na wskaźnik do klasy bazowej.