是否有可能摆脱 error 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 protected 而使隐式转换不可访问。
我试图通过在类 D 中创建一个运算符 B() 来避免显式转换,以使转换易于访问:
class B {};
class D : protected B
{
public:
operator B() {return *this;}
};
但是没有办法。
还有其他解决方案可以避免显式转换吗?
最佳答案
如果你想允许转换,你应该使用公共(public)继承。
使用 protected 或私有(private)继承,您声明派生类型从基类继承的事实是一个不应从外部可见的细节:这就是您收到该错误的原因。
您应该仅将非公共(public)继承视为一种组合形式,增加了覆盖方法的可能性。
关于c++ - 摆脱错误 C2243,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1471800/