我正在运行一个来自HackerRank的有关指针的简单C ++程序,该程序在网站上运行良好。然而,
当我在MacOS上运行它时,我得到error: call to 'abs' is ambiguous
,但不确定是什么模棱两可。
我已经查看了类似问题的其他答案,但是错误消息往往是Ambiguous overload call to abs(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行。
答案 0 :(得分:4)
完整的错误消息是:
id="{!! $item->id !!}"
您从$ clang++ test.cpp
test.cpp:8:10: error: call to 'abs' is ambiguous
*b = abs(num1 - num2);
^~~
.../include/c++/v1/math.h:769:1: note: candidate function
abs(float __lcpp_x) _NOEXCEPT {return ::fabsf(__lcpp_x);}
^
.../include/c++/v1/math.h:769:1: note: candidate function
abs(double __lcpp_x) _NOEXCEPT {return ::fabs(__lcpp_x);}
^
.../include/c++/v1/math.h:769:1: note: candidate function
abs(long double __lcpp_x) _NOEXCEPT {return ::fabsl(__lcpp_x);}
^
1 error generated.
获得的abs
的三个重载为<cmath>
,abs(float)
和abs(double)
;之所以模棱两可,是因为您有一个abs(long double)
参数,并且编译器不知道要转换为哪种浮点类型。
int
是在abs(int)
中定义的,因此<cstdlib>
将解决您的问题。
如果您使用的是Xcode,则可以在问题导航器(⌘5)中单击错误旁边的三角形,以获取有关该错误的更多详细信息。
答案 1 :(得分:3)
对我来说,#include <cstdlib>
并没有解决问题,也许是因为我不需要包含任何要使用的abs
。因此,如果它通过显式强制转换帮助其他人,则对我来说效果很好,如下面的代码所示:
*b = abs(int(num1 - num2));
答案 2 :(得分:0)
如果您使用的是C编译器,则应包含
def get_template_names(self):
if mobileBrowser(self.request):
template_name = 'index_app/mobile/index.html'
else:
template_name = 'index_app/index.html'
return template_name
并使用不带std ::的ABS。 如果使用C ++编译器,则应将abs更改为std :: abs。
希望有帮助:)