首页 > 解决方案 > 错误:向类构造函数添加参数时没有匹配的函数调用

问题描述

我有一个类“a”,它有一个类“b”的实例。以下代码在问题的标题中给出了错误,但是当我将 b 更改为不接受任何参数时,代码运行时没有错误。

class b
{
public:
    b(int);
};

class a
{
  public:
  b bObj;
      a(int arg1, const std::string& arg2);
};

a::a(int arg1, const std::string& arg2){
  bObj = b(5);
}

b::b(int IDD2){
  srand(time(0)+IDD2);
}

在“b”没有参数的情况下运行此代码有效,但我实际上需要传入一个值。为什么会出现此错误?

标签: c++parametersarguments

解决方案


在构造函数中abObj必须在进入函数体之前构造。但是 没有零参数构造函数b,并且您没有提供默认初始化程序,因此您会收到错误消息。

相反,您可以bObj使用成员初始化器列表在到达构造函数的主体之前进行初始化:

a::a(int arg1, const std::string& arg2) : bObj(5) {}

或者在类中提供默认值:

class a
{
  public:
  b bObj = 5;
  a(int arg1, const std::string& arg2);
};

推荐阅读