Можно ли избавиться от ошибки C2243?
class B {};
class D : protected B {};
D d;
B *p = &d; // conversion from 'D *' to 'B &' exists, but is inaccessible
У меня была эта ошибка в моем приложении, и в конце концов мне удалось скомпилировать ее, выполнив явное преобразование:
D d;
B *p = (B*)&d;
Я не могу понять, почему создание класса D, унаследованного от B, делает неявное преобразование недоступным.
Я попытался избежать явного преобразования, создав оператор B() в классе D, чтобы сделать преобразование доступным:
class B {};
class D : protected B
{
public:
operator B() {return *this;}
};
Но нет никакого способа.
Любое другое решение, позволяющее избежать явного преобразования?