以下代码给出了错误:“B”是“D”的不可访问的基础。
为什么会这样? B 的构造函数是公共(public)的,这意味着它应该由类 D 继承,即使继承是 protected /私有(private)的。
有人也可以告诉我一个解决方法吗?当然,除了公开继承。
#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;
}
谢谢!
最佳答案
你的例子可以缩小到
D * p_d{nullptr};
B * p_b{p_d};
禁止在派生类和派生类的 friend 范围之外强制转换为私有(private)基类。错误与构造函数无关(它将按预期工作)。
您可能还想查看 some workarounds .
关于c++ - 意外无法访问的基础(第一个派生类),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44488533/