尝试使用float参数运行重载函数时出错。

时间:2018-03-23 17:24:23

标签: c++ function c++11 overloading

我试图在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);

}

3 个答案:

答案 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值转换为intfloat,从而为您提供错误。

如果您想调用float重载,请使用3.5f将其设为float值。或者更改您的重载以使用double类型而不是float

答案 2 :(得分:1)

你写的是3.5是一个浮点数这个值不是浮点数它是一个双精度。