以下代码给出了错误:' B'是' D'
的难以接近的基础。为什么会这样? B的构造函数是public,这意味着它应该由D类继承,即使继承是受保护的/私有的。
有人可以告诉我一个解决方法吗?当然除了将继承公之于众之外。
#include <iostream>
#include <typeinfo>
using namespace std;
class B
{ int i;
public:
B() { i=1; }
int get_i() { return i; }
};
class D: private B
{ int j;
public:
D() { j=2; }
int get_j() {return j; }
};
int main()
{
B *p= new D;
return 0;
}
谢谢!
答案 0 :(得分:0)
你的例子可以缩小到
D * p_d{nullptr};
B * p_b{p_d};
在派生类和派生类的朋友范围之外,禁止强制转换为私有基类。错误与构造函数无关(它将按预期工作)。
您可能还想查看some workarounds。