是否有可能摆脱error C2243?摆脱错误C2243
class B {};
class D : protected B {};
D d;
B *p = &d; // conversion from 'D *' to 'B &' exists, but is inaccessible
我在我的应用程序有这个错误,并在结束时,我已经成功通过进行显式转换编译它:为什么通过使d类继承保护
D d;
B *p = (B*)&d;
我无法理解从B使隐式转换无法访问。
我试图以进行转换访问创造d一流的运营商B(),以避免显式转换:
class B {};
class D : protected B
{
public:
operator B() {return *this;}
};
但也没有办法。
任何其他解决方案,以避免显式转换?
什么基类的const接口?所以私下继承并允许投射到const base&?因为无法让它在MSVC上工作... – 2017-04-07 17:49:04
只需回复自己,您需要通过聚合而不是继承来处理类,否则MSVC会感到困惑并尝试通过私有继承来解决转换(隐藏投射运算符) – 2017-04-07 17:54:35