使用浮点数“调用重载函数是不明确的”错误

我重载函数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的信息)