意外的不可访问的基础(第一个派生类)

时间:2017-06-11 20:36:39

标签: c++ class oop inheritance compiler-errors

以下代码给出了错误:' 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;
 }

谢谢!

1 个答案:

答案 0 :(得分:0)

你的例子可以缩小到

D * p_d{nullptr};
B * p_b{p_d};

在派生类和派生类的朋友范围之外,禁止强制转换为私有基类。错误与构造函数无关(它将按预期工作)。

您可能还想查看some workarounds