Възможно ли е да се отървете от грешка 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;}
};
Но няма начин.
Някакво друго решение за избягване на изрично преобразуване?