我有以下情况:
class A
{
public:
A(std::string id);
};
class B : public virtual A
{
public:
B();
};
class C : public virtual A
{
public:
C();
};
class D : public B, public C
{
public:
D(std::string id);
};
D::D(std::string id) : A(id), B(), C()
{
}
class X : public D
{
public:
X(std::string id);
}
X::X(std::string id) : D(id)
{
}
现在,如果我创建一个 D 实例,一切正常。但是,如果我创建 X 的一个实例,我会得到一个编译器错误,它告诉我某些东西试图调用 A 的默认构造函数——它不存在。如果我创建它,它会编译,但只调用默认构造函数,因此,id 没有正确设置/初始化。
这可以通过像这样实现 X 的构造函数来解决:
X::X(std::string id) : A(id), D(id)
{
}
但我的理解是,这应该是不必要的。那么我的错误在哪里?