使用浮点数“调用重载函数是不明确的”错误
我重载函数add()
,但是当我使用float
数据types时,它显示一个错误。 但是,当我将其更改为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,可选带符号整数指数和可选types后缀组成。 整数和小数部分都由十进制(十进制)数字组成。 在确定数值时,可以将数字序列中的单引号分隔开。 [例如:文字1.602'176'565e-19和1.602176565e-19具有相同的值。 – 结束示例]整数部分或小数部分(不是两个)都可以省略; 小数点或字母e(或E)和指数(不是两个)都可以省略。 整数部分,可选小数点和可选小数部分构成了浮点文字的重要部分。 指数(如果存在的话)指示重要部分将被缩放的10的幂。 如果缩放值在其types的可表示值范围内,则结果是缩放值(如果可表示的话),否则是以实现定义的方式select的最接近缩放值的较大或较小可表示值。 除非通过后缀明确指定,浮点文字的types是双精度的。 后缀f和f指定float,后缀l和L指定long double。 如果缩放的值不在其types的可表示值的范围内,则该程序是格式不正确的。
(抱歉发布所有这些,但你可以通过这种方式了解更多关于float
的信息)