继承构造函数(ISO 2011 SEC 12.9第7段)



我正在尝试从ISO 2011 SEC 12.9 para中尝试示例7.FOLLWING是我要编译的代码

int chk;
struct B1 {   B1(int){chk=9;} };
struct B2 {   B2(int){chk=10;} };
struct D2 : B1, B2 {
       using B1::B1;
       using B2::B2;
      D2(int){chk=0;};  
};
int main(){
  B1 b(9);
  D2 d(0);
  return 0;
}

$ g -std = C 11示例.cpp错误消息

 <source>: In constructor 'D2::D2(int)': <source>:7:10: error: no matching function for call to 'B1::B1()'    D2(int){chk=0;};
      ^ <source>:2:15: note: candidate: B1::B1(int)  struct B1 {   B1(int){chk=9;} };
           ^~ <source>:2:15: note:   candidate expects 1 argument, 0 provided <source>:2:8: note: candidate: constexpr B1::B1(const B1&)  struct B1 {   B1(int){chk=9;} };
    ^~ <source>:2:8: note:   candidate expects 1 argument, 0 provided <source>:2:8: note: candidate: constexpr B1::B1(B1&&) <source>:2:8: note:   candidate expects 1 argument, 0 provided <source>:7:10: error: no matching function for call to 'B2::B2()'    D2(int){chk=0;};
      ^ <source>:3:15: note: candidate: B2::B2(int)  struct B2 {   B2(int){chk=10;} };
           ^~ <source>:3:15: note:   candidate expects 1 argument, 0 provided <source>:3:8: note: candidate: constexpr B2::B2(const B2&)  struct B2 {   B2(int){chk=10;} };
    ^~ <source>:3:8: note:   candidate expects 1 argument, 0 provided <source>:3:8: note: candidate: constexpr B2::B2(B2&&) <source>:3:8: note:   candidate expects 1 argument, 0 provided Compiler exited with result code 1

这是GCC中的错误吗?为什么要寻找B1((?我正在使用GCC 6.3.0

编辑:链接问题中的问题是关于何时使用一个基类。I.E遵循代码

int chk;
struct B1 {   B1(int){chk=9;} };
//struct B2 {   B2(int){chk=10;} };
struct D2 : B1  {
   using B1::B1;
  //using B2::B2;
  //D2(int){chk=0;};  
 };
int main(){
   B1 b(9);
   D2 d(0);
   return 0;
}

正在工作时,但是当d2(int({chk = 0;}引入错误时。

D中,您提供了唯一的构造函数D2(int){chk=0;},该构造函数不会明确调用基类B1B2的任何构造函数。因此,编译器在B1B2中寻找默认构造函数,该构造函数被隐式调用。但是您的基本结构B1B2不提供默认构造函数...

因此,在B1B2中定义默认构造函数,或在D的构造函数的启动器列表中明确调用其他构造函数:

D2(int x):B1(x),B2(x) {chk=0;};

相关内容

  • 没有找到相关文章

最新更新