Как исправить «ошибку: вызов« abs »неоднозначен» - PullRequest
0 голосов
/ 10 июля 2019

Я использую простую программу на C ++ от HackerRank с указателями, и она отлично работает на веб-сайте.Тем не менее, когда я запускаю его на 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.

Ответы [ 2 ]

4 голосов
/ 10 июля 2019

Полное сообщение об ошибке:

$ 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>, поэтому #include <cstdlib> решит вашу проблему.

Если вы используете XCode, вы можете получить более подробную информацию об ошибке в Навигаторе проблем (⌘5) и щелкнув треугольник рядом с вашей проблемой.

0 голосов
/ 10 июля 2019

если вы используете компилятор C, вы должны включить

#include <stdlib.h>

и использовать abs без std ::.Если вы используете компилятор C ++, вам следует изменить abs на std :: abs.

Надеюсь, это поможет:)

...