如何解决“错误:对“ abs”的调用不明确”

时间:2019-07-10 20:43:42

标签: c++ cmath

我正在运行一个来自HackerRank的有关指针的简单C ++程序,该程序在网站上运行良好。然而, 当我在MacOS上运行它时,我得到error: call to 'abs' is ambiguous,但不确定是什么模棱两可。

我已经查看了类似问题的其他答案,但是错误消息往往是Ambiguous overload call to abs(double),这不是我遇到的问题,因为我没有使用任何双打。我也尝试过包含头文件cmathmath.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行。

3 个答案:

答案 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。

希望有帮助:)