【问题标题】:error when trying to run an overloaded function with float parameters.尝试使用浮点参数运行重载函数时出错。
【发布时间】:2018-03-23 17:24:23
【问题描述】:

我正在尝试在 C++ 中创建一个简单(绝对)函数,我创建了两个同名函数,一个接受整数并返回整数,另一个接受浮点数并返回浮点数,但每次我尝试运行我收到此错误的代码:

“错误:重载'absolute(double)'的调用不明确”

我尝试更改第二个函数的输入参数,使其接受一个双精度并返回一个浮点数并且代码运行完美,我想知道为什么当参数和返回类型为 都设置为浮动,谢谢。

#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);

}

【问题讨论】:

  • 最好使用double 而不是float

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


【解决方案1】:

文字3.5 的类型是double,而不是float

选择任一重载都需要转换。因此模棱两可。

您可以使用 3.5f 使其成为 float 文字。

cout << absolute(3.5f);

IMO 更好的解决方案是使用函数模板。

template <typename T>
T absolute(T x)
{
   return (x < 0 ? -x : x);
}

【讨论】:

  • 或者为double提供重载。
  • @JesperJuhl,或函数模板。
  • @R Sahu 当然,这是提供过载的一种方法。
【解决方案2】:

再次阅读该错误消息。请注意它是如何将 double 作为它要使用的参数类型的。

这是因为像3.5 这样的浮点常量属于double 类型。并且编译器不知道它是否应该将double 值转换为intfloat,从而给您错误。

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

【讨论】:

  • 非常感谢,我认为任何带小数点的数字都被认为是浮点数
【解决方案3】:

你写到 3.5 是一个浮点数,这个值不是浮点数而是双精度数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-18
    • 2021-10-29
    相关资源
    最近更新 更多