我试图在c ++中创建一个简单(绝对)函数,我创建了两个具有相同名称的函数,一个取整数并返回一个整数,一个取浮点数并返回一个浮点数,但每次我尝试运行代码我收到此错误:
"错误:调用过载'绝对(双重)'含糊不清"
我尝试更改第二个函数的输入参数,以便它需要一个double并返回一个float并且代码运行完美,我想知道为什么代码在参数和运行时不会运行返回类型都设置为浮动,谢谢。
#include <iostream>
#include <fstream>
using namespace std;
int absolute(int x){
if (x<0){
x=-x;
}
return x;
}
float absolute (float x)
{
if (x<0){
x=-x;
}
return x;
}
int main( )
{
cout << absolute(3.5);
}
答案 0 :(得分:3)
文字3.5
的类型为double
,而不是float
。
选择任何一个重载都需要转换。因此含糊不清。
您可以使用3.5f
将其设为float
字面值。
cout << absolute(3.5f);
更好的解决方案IMO将使用功能模板。
template <typename T>
T absolute(T x)
{
return (x < 0 ? -x : x);
}
答案 1 :(得分:1)
再次阅读该错误消息。请注意它是如何将 double
作为要使用的参数类型。
这是因为像3.5
这样的浮点常量属于double
类型。并且编译器不知道它是否应该将double
值转换为int
或float
,从而为您提供错误。
如果您想调用float
重载,请使用3.5f
将其设为float
值。或者更改您的重载以使用double
类型而不是float
。
答案 2 :(得分:1)
你写的是3.5是一个浮点数这个值不是浮点数它是一个双精度。