c++ - 意外无法访问的基础(第一个派生类)

标签 c++ class oop inheritance compiler-errors

以下代码给出了错误:“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/

相关文章:

javascript - 在哪里放置另一个 javascript 类中的(类)依赖项?

oop - 代码设计: Who's responsible for changing object data?

php - 可以列出所有 PHP 类及其方法和属性吗?

javascript - 通过类名获取ID JQuery

c++ - try-catch 在 try 中检查多个对象

c++ - 如何将日期字符串解析为 c++11 std::chrono time_point 或类似的?

c++ - 有没有办法在 Windows 的 basic_iostream 上获得非锁定流插入/提取?

c - 为什么标准 C 库不需要分为头文件和实现文件?

java - 及时建模对象状态变化的最佳实践?

c++ - C++中的堆排序实现