当前位置: 首页 > 知识库问答 >
问题:

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

姚德容
2023-03-14

我得到了错误,不知道是什么错了

我试着把构造器排除在外。

我得到以下错误:

在构造函数“B::B(int,int)”中:没有用于调用“A::A()”的匹配函数

备注候选人有:

A::A(常数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个答案

沈思博
2023-03-14

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

你需要这样的东西:

B(int c1=10, int d1=20) : A(c1, d1) {
               c=c1; d=d1;
               e = a * b;
               }   

或者使A默认可构造。

此外,您还应该使用cde的初始化列表,而不是在构造函数的主体中分配(尽管优化器将在这种情况下处理它,总是以正确的方式做这件事是更好的形式)

B(int c1=10, int d1=20) : A(c1, d1), c(c1), d(d1), e(a*b) {}   
 类似资料:
  • 我是c语言的新手。当我运行代码时,出现以下错误:( 大Sorting.cpp:在函数int main(int, const char**)中:大Sorting.cpp:13: 22:错误:没有匹配函数调用std::向量 这是我的代码

  • 我尝试了一些代码在Java中交换两个整数,而不使用第三个变量,即使用XOR。 以下是我尝试的两个交换函数: 该代码产生的输出如下: 我很想知道,为什么会有这样的说法: 和这个不一样?

  • 本文向大家介绍给两个构造函数A和B,如何实现A继承B?相关面试题,主要包含被问及给两个构造函数A和B,如何实现A继承B?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: // 再在A的构造函数里new B(props);  

  • 我只是想习惯基本的复制构造函数。 我假设我正确地放置了复制构造函数。 但是当我试图编译时,我不断地得到错误“没有匹配的构造函数来初始化B” 我有点困惑。

  • 问题内容: 我尝试了一些代码,使用XOR在Java中交换两个整数而不使用第三个变量。 这是我尝试的两个交换函数: 这段代码产生的输出是这样的: 我很好奇,为什么这样说: 与这个不同吗? 问题答案: 问题是评估的顺序: 参见JLS第15.26.2节 首先,对左操作数求值以产生一个变量。 如果该评估突然完成,则赋值表达式由于相同的原因而突然完成;右边的操作数不会被评估,并且不会发生赋值。 否则,将保存

  • 我的目标是优化我的应用程序代码。我的代码如下所示: 当我在Netbeans中使用Findbugs进行静态分析时,它显示了一个类似于“方法调用无效的新整数(int)构造函数;使用Integer.valueOf(int)”的警告/错误。 我知道新整数(int)和整数之间的区别。valueOf(int)。 一个创建一个附加对象,另一个不创建。一个不缓存,另一个缓存。 所以我这样修改了我的代码... 但同