我正在重载该函数add()
,但是当我使用float
数据类型时,它显示了一个错误。但是,当我将其更改为时double
,它可以正常工作。为什么float
导致错误?
代码是:
#include <iostream>
using namespace std;
class students{
private:
int i;
float f;
public:
void add(int b){
i=b;
cout << "First Int: " << i;
}
void add(float c){
f=c;
cout << "Second Int: " << f;
}
};
int main(){
students obj;
obj.add(9);
obj.add(5.5);
}
错误:
In function 'int main()':
[Error] call of overloaded 'add(double)' is ambiguous
[Note] candidates are:
[Note] void students::add(int)
[Note] void students::add(float)
5.5
是double
,但您的函数都不带double
参数。因此,编译器对于是调用带int
参数的函数还是带参数的函数感到困惑float
。因此,您会收到一个错误消息,说它模棱两可。
这就是为什么当您将函数更改为具有double
参数时,错误不再出现的原因,因为现在有一个可以接受double
参数的函数,因此那里存在歧义。
您也可以通过调用以下函数来解决问题:
obj.add(5.5f);
f
在数字后面加上会使它成为浮点数。
让我们看一下C ++标准
第2.13.4节
1浮点文字由整数部分,小数点,小数部分,e或E,一个可选带符号的整数指数以及一个可选类型后缀组成。整数部分和小数部分均由十进制(十进制)数字序列组成。确定数字值时,将忽略数字序列中的可选分隔单引号。[示例:文字1.602'176'565e-19和1.602176565e-19具有相同的值。--end示例]可以省略整数部分或分数部分(不能全部省略);小数点或字母e(或E)和指数(不是两者)都可以省略。整数部分,可选的小数点和可选的小数部分构成了浮动文字的重要部分。指数(如果存在)指示10的幂,有效部分将按该幂进行缩放。除非后缀明确指定,否则浮动文字的类型为double。后缀f和F指定浮点数,后缀l和L指定长整数。如果缩放后的值不在其类型的可表示值范围内,则程序格式错误。
(对不起,所有内容都已发布,但是您可以float
通过这种方式了解有关s的更多信息)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句