'A::A' :no appropriate default constructor available#includeclass A{protected:int a;public:A(int x){a=x;cout

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/03 01:26:56
'A::A' :no appropriate default constructor available#includeclass A{protected:int a;public:A(int x){a=x;cout

'A::A' :no appropriate default constructor available#includeclass A{protected:int a;public:A(int x){a=x;cout
'A::A' :no appropriate default constructor available
#include
class A
{
protected:
int a;
public:
A(int x)
{
a=x;
cout

'A::A' :no appropriate default constructor available#includeclass A{protected:int a;public:A(int x){a=x;cout
这个要改对的话只要在D的构造函数显式调用A的构造函数A(x)就可以了
D(int x):A(x),B(x),C(x)
这是一个典型的菱形继承结构
直接写
D(int x):B(x),C(x)
是有问题的,属于行为未定义,因为先调用B(x)还是C(x)在C++的标准中是没有定义的.虽然在很多编译环境中都是先B后C,但这并不可靠
effective c++中对这一结构进行了详细的剖析,感兴趣的话可以去好好看看