c++ - 错误:向类构造函数添加参数时没有匹配的函数调用
问题描述
我有一个类“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”没有参数的情况下运行此代码有效,但我实际上需要传入一个值。为什么会出现此错误?
解决方案
在构造函数中a
,bObj
必须在进入函数体之前构造。但是 没有零参数构造函数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);
};
推荐阅读
- python - 如何识别包含浮点数和整数的熊猫数据框中的整数
- bash - BSD 中的进程替换挂起(有时)
- ios - AVSpeechSynthesisVoice 不适用于某些用户
- python - Python Pandas 将不匹配的时间序列处理并合并为数据框
- spring-boot - Spring Boot 中 LogBack 的哪种日志记录模式使用换行符缩进消息?
- python - 命令组合 .txt 文件中的所有单词
- java - 如何编辑jar文件
- javascript - 如何在复选框和单选按钮中设置默认值?
- ios - 如何通过 Http Request 正确发送应用内订阅收据?
- c# - 如何从字符串中计算一个数字