最后,在基类中没有默认构造函数的情况下,出现了多重继承菱形问题。
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) {}但是,我真的不能从A上获得D.我怎么才能解决呢?谢谢
发布于 2021-04-23 20:20:58
您确实可以访问A,因为您是从它继承的。
为了构造对象A,您必须调用D的构造函数。您的D构造函数应该是这样的:由于多重继承,B和C的构造函数将忽略A(x)部分,并且只有一个对象,即D。
https://stackoverflow.com/questions/67236275
复制相似问题