Asi*_*taq 6 c++ overloading ambiguous
我正在重载该函数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);
}
Run Code Online (Sandbox Code Playgroud)
错误:
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)
Run Code Online (Sandbox Code Playgroud)
5.5是一个double,但你的任何一个函数都没有double参数.因此,编译器对是否使用int参数调用函数或使用参数调用函数感到困惑float.所以,你得到一个错误,说它是模棱两可的.
这就是为什么当你改变函数以获得double参数时,错误不再出现,因为现在有一个函数可以接受一个double参数,因此存在歧义.
您也可以通过调用函数来解决问题
obj.add(5.5f);
Run Code Online (Sandbox Code Playgroud)
f在数字之后添加使其成为浮点数.
我们来看看C++标准
§2.13.4
1浮动文字由整数部分,小数点,小数部分,e或E,可选的有符号整数指数和可选的类型后缀组成.整数和分数部分都由一系列十进制(十进制)数字组成.在确定其值时,将忽略数字序列中的可选分隔单引号.[例子:文字1.602'176'565e-19和1.602176565e-19具有相同的值. - 末端示例]可以省略整数部分或小数部分(不是两者); 可以省略小数点或字母e(或E)和指数(不是两者).整数部分,可选的小数点和可选的小数部分构成浮动文字的重要部分.指数(如果存在)表示要对其进行缩放的10的幂.如果缩放值在其类型的可表示值的范围内,则结果是如果可表示的缩放值,否则最接近缩放值的较大或较小可表示值,以实现定义的方式选择.除非后缀明确指定,否则浮动文字的类型为double.后缀f和F指定float,后缀l和L指定long double.如果缩放值不在其类型的可表示值范围内,则程序格式不正确.
(很抱歉发布所有内容,但你可以float通过这种方式了解更多信息)