Je suis un programme simple C++ de Hackerrank sur les pointeurs et cela fonctionne bien sur le site Web. Cependant, quand je l'exécute sur Macos, je reçois error: call to 'abs' is ambiguous
Et je ne suis pas sûr exactement ce qui est ambigu.
J'ai examiné d'autres réponses à des questions similaires, mais le message d'erreur a tendance à être Ambiguous overload call to abs(double)
, ce qui n'est pas le problème que je vais avoir, car je n'ai utilisé aucun doublement. J'ai également essayé, y compris les fichiers d'en-tête cmath
et math.h
, Mais le problème persiste.
#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;
}
Mon problème se produit avec la ligne 8.
Le message d'erreur complet est:
$ 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.
Les trois surcharges de abs
que vous avez à partir de <cmath>
Sont abs(float)
, abs(double)
et abs(long double)
; Il est ambigu parce que vous avez un argument int
et le compilateur ne sait pas quel type de point flottant à convertir.
abs(int)
est défini dans <cstdlib>
, donc #include <cstdlib>
résoudra votre problème.
Si vous utilisez Xcode, vous pouvez obtenir plus de détails sur l'erreur dans les numéros Navigator (⌘5) et en cliquant sur le triangle à côté de votre problème.
Pour moi, #include <cstdlib>
N'a pas résolu la question, peut-être parce que je n'ai pas eu à inclure quoi que ce soit à utiliser abs
. Donc, au cas où cela aide quelqu'un d'autre, avec la coulée explicite, cela a bien fonctionné pour moi comme dans le code suivant:
*b = abs(int(num1 - num2));
si votre utilisation de C compilateur C devriez inclure
#include <stdlib.h>
et utilisez ABS sans std ::. Si vous utilisez C++ Compiler, vous devriez changer ABS à STD :: ABS.
J'espère que ça aide:)