首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >没有默认构造函数的多重继承菱形问题

没有默认构造函数的多重继承菱形问题
EN

Stack Overflow用户
提问于 2021-04-23 20:07:38
回答 1查看 146关注 0票数 1

最后,在基类中没有默认构造函数的情况下,出现了多重继承菱形问题。

代码语言:javascript
运行
复制
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);
}

编译器抱怨:

代码语言:javascript
运行
复制
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.我怎么才能解决呢?谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-23 20:20:58

您确实可以访问A,因为您是从它继承的。

为了构造对象A,您必须调用D的构造函数。您的D构造函数应该是这样的:由于多重继承,BC的构造函数将忽略A(x)部分,并且只有一个对象,即D

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67236275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档