我正在运行一个简单的C++程序从HackerRank关于指针和它的网站上工作正常.然而,当我运行它在MacOS,我得到error: call to 'abs' is ambiguous
,我不知道到底是什么是模棱两可.
我已经看过类似问题的其他答案,但错误消息往往是Ambiguous overload call to abs(double)
,这不是我遇到的问题,因为我没有使用任何double。我还尝试包括头文件cmath
和math.h
,但问题仍然存在。
#include <stdio.h>
#include <cmath>
void update(int *a,int *b) {
int num1 = *a;
int num2 = *b;
*a = num1 + num2;
*b = abs(num1 - num2);
}
int main() {
int a, b;
int *pa = &a, *pb = &b;
scanf("%d %d", &a, &b);
update(pa, pb);
printf("%d\n%d", a, b);
return 0;
}
我的问题出现在第8行。
6条答案
按热度按时间2jcobegt1#
完整的错误消息如下:
从
<cmath>
得到的abs
的三个重载是abs(float)
、abs(double)
和abs(long double)
;它是不明确的,因为你有一个int
参数,编译器不知道要转换为哪个浮点类型。abs(int)
是在<cstdlib>
中定义的,因此#include <cstdlib>
将解决您的问题。如果你使用的是Xcode,你可以在Issues导航器(5)中点击你的issue旁边的三角形,获得关于错误的更多细节。
3ks5zfa02#
对我来说,
#include <cstdlib>
并没有解决这个问题,也许是因为我不需要包含任何东西来使用abs
。所以,如果它可以帮助其他人,通过显式转换,它对我来说很好,就像下面的代码一样:rdrgkggo3#
在模板代码中,
std::abs
没有为unsigned类型定义,这一点很容易被忽略。举个例子,如果下面的方法为unsigned类型示例化,编译器可能会正确地抱怨std::abs
是未定义的:在上面的代码中,
areClose()
的一个更好的定义,碰巧也解决了std::abs()
未定义的问题,可能看起来像这样:mzillmmw4#
如果你使用C编译器,你应该包括
如果你使用C++编译器,那么你应该把abs改成std::abs。
希望有帮助:)
hsvhsicv5#
只要在#include上面加上#include,错误就会消失。
lsmd5eda6#
我使用
#include <bits/stdc++.h>
作为唯一的include语句,它对我很有效。我的代码: