繁体   English   中英

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

[英]error: call of overloaded 'abs(double)' is ambiguous

我一直在寻找答案,但找不到适合我非常简单的情况的答案。

为什么地球上的Abs仅适用于整数? 我无法执行此操作?

// Example program
#include <iostream>

using namespace std;

int main()
{
    float someVariable = abs(-4.22);
    cout << someVariable;
}

注意,我正在使用http://cpp.sh对其进行测试。

Abs具有不同的实现方式,具体取决于其包含方式。

要获得浮点数,那么您需要

#include <cmath>

结果程序

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
    float someVariable = abs(-4.22);
    cout << someVariable;
}

参考cppreference abs(float)

您需要包括数学库,如下所示:

#include <cmath>

std::abs采取以下任何一种措施:

  • int
  • long
  • long long
  • float
  • double
  • long double

但是,在C ++ 17之前,除非您#include <cmath> ,否则只有整数重载(列出的前三个)可用。 您正在传递一个float ,该float可以很好地转换为其中的任意三个,因此编译器无法确定您要哪个。

如果确实想要整数重载,则可以根据需要对intlonglong long使用强制转换。

但是您不需要这样做:您想触发float过载,因此请通过#include <cmath>将其引入范围,然后应自动将其选中,因为您传递的是float

实际上,实际上,您很幸运甚至整数重载都可用,因为您永远不会#include d <cstdlib> ; 您的工具链的<iostream>必须恰好为您完成。 始终根据文档提供适当的标题。

在cmath标头中声明abs()。 因此,如果要使用abs(),则需要在代码中包含cmath,如下所示:

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
    float someVariable = abs(-4.22);
    cout << someVariable;
}

注意:从C ++ 11和更高版本开始,我们可以通过以下方式使用abs():

double abs (double x);
float abs (float x);
long double abs (long double x);
double abs (T x);           // additional overloads for integral types

参考: http : //www.cplusplus.com/reference/cmath/abs/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM