为什么会出现以下错误:在构造函数'B :: B(int,int)'中:没有匹配的函数可用于调用'A :: A()'

时间:2019-05-30 19:58:50

标签: c++ inheritance

我遇到错误,不知道出什么问题了

我尝试过省略构造函数。

我遇到以下错误:

  

在构造函数'B :: B(int,int)'中:没有匹配的函数可以调用'A :: A()'

     

笔记候选人为:

     

A :: A(const A&)

     

A :: A(int,int)

#include <iostream> 
using namespace std;

class A{
  public:
         int a;
         int b;
         A(int a1, int b1){
               a=a1; b = b1;
               }
  };

class B : public A {
  public:
         int c;
         int d;
         int e;
         B(int c1=10, int d1=20){
               c=c1; d=d1;
               e = a * b;
               }          
  void show(){
       cout <<"a = "<<a<<endl;
       cout <<"b = "<<b<<endl;
       cout <<"c = "<<c<<endl;
       cout <<"d = "<<d<<endl;
       cout <<"e = "<<e<<endl;
       }
  };

int main() {
  A a(2,2);
  B b;
  b.show();
  return 0;
}

1 个答案:

答案 0 :(得分:5)

B继承自A,因此它需要构造一个A,但是您没有A的默认构造函数,也没有显式调用{ A的初始化列表中的{1}}。

您需要这样的东西

B

或将B(int c1=10, int d1=20) : A(c1, d1) { c=c1; d=d1; e = a * b; } 设为默认可构造。

此外,您还应该同时使用Acd的初始化列表,而不是在构造函数的主体中分配(尽管优化程序会请在这种情况下进行处理,最好是始终以正确的方式进行操作)

e