为什么输出显示错误

Why output is showing errors

本文关键字:错误 显示 输出 为什么      更新时间:2023-10-16

这是一个关于多重继承的菱形树问题的代码据我所见,这段代码很酷,但它在编译时显示了一些错误..帮我找出错误

#include<iostream>
using namespace std;
class A  //A Diamond tree problem
{
  int x;
public:
  A(int i) { x = i; }
  void print() { cout << x; }
};
class B: virtual public A
{
public:
  B():A(10) {  }
};
class C:  virtual public A 
{
public:
  C():A(20) {  }
};
class D: public B, public C{
};
int main()
{
    D d;
    d.print();
    return 0;
}

看到错误会很有用:

In constructor ‘D::D()’:
error: no matching function for call to ‘A::A()’

使用虚继承时,虚基类必须由最远的派生类初始化。在这种情况下,它是D;因此,为了能够实例化D,它必须初始化A:

class D: public B, public C
{
public:
    D():A(42) {}
};

或者,您可以为A提供一个默认构造函数。声明任何构造函数将防止编译器隐式地为您生成一个。

您需要为D提供默认构造并在成员初始化列表中调用A:

class D: public B, public C{
public:
   D():A(30){}
};

或者你可以提供一个默认的a构造函数

A():x(0) {}
相关文章: