[英]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;
}
您需要包括数学库,如下所示:
#include <cmath>
std::abs
采取以下任何一种措施:
但是,在C ++ 17之前,除非您#include <cmath>
,否则只有整数重载(列出的前三个)可用。 您正在传递一个float
,该float
可以很好地转换为其中的任意三个,因此编译器无法确定您要哪个。
如果确实想要整数重载,则可以根据需要对int
, long
或long 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.