我最终遇到了一个多重继承菱形问题,即基类中没有默认构造函数。
struct A {
A(int x) {}
};
struct B : virtual public A {
using A::A;
};
struct C : virtual public A {
using A::A;
};
struct D : virtual public B, public C {
D(int x) : B(x), C(x) {}
};
int main() {
D d(1);
}
编译器抱怨:
error: constructor for 'D' must explicitly initialize the base
class 'A' which does not have a default constructor
D(int x) : B(x), C(x) {}
但是,我实际上无法从D
访问A
。。。我该怎么解决?感谢
您确实可以访问A
,因为您继承了它。
您必须调用A
的构造函数才能构造对象D
。您的D
构造函数应该是这样的:D(int x) : A(x), B(x), C(x) {}
由于多重继承,B
和C
的构造函数将忽略A(x)
部分,并且您将只有一个对象,即D
。