我一直在寻找答案,但找不到适合我非常简单的情况的答案。
为什么地球上的Abs仅适用于整数?我无法执行此操作?
// Example program
#include <iostream>
using namespace std;
int main()
{
float someVariable = abs(-4.22);
cout << someVariable;
}
注意,我正在使用http://cpp.sh进行测试。
答案 0 :(得分:2)
abs具有不同的实现方式,具体取决于其包含方式。
要获取浮点数,则需要
#include <cmath>
结果程序
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
float someVariable = abs(-4.22);
cout << someVariable;
}
答案 1 :(得分:1)
您需要包括数学库,如下所示:
#include <cmath>
答案 2 :(得分:1)
std::abs
具有以下任何一项:
但是,在C ++ 17之前,除非您#include <cmath>
,否则只有整数重载(列出的前三个)可用。您正在传递的float
可以很好地转换为其中的任何三个,因此编译器无法确定您要哪个。
如果您没有想要整数重载,则可以根据需要使用对int
,long
或long long
的强制转换。
但是您不需要这样做:您想触发float
重载,因此将其引入#include <cmath>
的作用域,然后应该自动选择它,因为您要传递float
事实上,您只是很幸运,甚至整数重载都可用,因为您从未#include
d <cstdlib>
;您的工具链的<iostream>
必须做到了恰好如此。始终根据文档提供适当的标题。
答案 3 :(得分:1)
abs()在cmath标头中声明。因此,如果要使用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