OVH Cloud OVH Cloud

problème avec abs

6 réponses
Avatar
fanny & michou
Bonjour,

Mon programme compile correctement a mon travail mais a des
erreurs chez moi...
Les versions de g++ sont :
a mon travail g++ (GCC) 3.2.3 20030502 (Red Hat Linux 3.2.3-42)
chez moi g++ (GCC) 3.4.1 (Mandrakelinux (Alpha 3.4.1-3mdk)

L'erreur de compilation est la suivante :
Graph.cpp:467: error: call of overloaded `abs(double)' is ambiguous
/usr/include/stdlib.h:748: note: candidates are: int abs(int)

Cette erreur n'apparait pas a mon travail...
Quelqu'un a-t-il une explication?
Est-ce que les résultats fournis par abs(double) sont alors erronés
a mon travail?

Merci pour votre aide...

Fanny

6 réponses

Avatar
Fabien LE LEZ
On Fri, 10 Sep 2004 23:17:19 +0200, fanny & michou
:

Graph.cpp:467: error: call of overloaded `abs(double)' is ambiguous


Si je ne m'abuse, "int abs(int)" est déclaré dans stdlib.h et "double
abs (double)" dans math.h. Ça vient peut-être de là...


--
;-)

Avatar
fanny & michou
On Fri, 10 Sep 2004 23:17:19 +0200, fanny & michou
:


Graph.cpp:467: error: call of overloaded `abs(double)' is ambiguous



Si je ne m'abuse, "int abs(int)" est déclaré dans stdlib.h et "double
abs (double)" dans math.h. Ça vient peut-être de là...


J'ai pourtant #include <math.h> dans mon fichier...



Avatar
Gabriel Dos Reis
fanny & michou writes:

| Bonjour,
|
| Mon programme compile correctement a mon travail mais a des
| erreurs chez moi...
| Les versions de g++ sont :
| a mon travail g++ (GCC) 3.2.3 20030502 (Red Hat Linux 3.2.3-42)
| chez moi g++ (GCC) 3.4.1 (Mandrakelinux (Alpha 3.4.1-3mdk)
|
| L'erreur de compilation est la suivante :
| Graph.cpp:467: error: call of overloaded `abs(double)' is ambiguous
| /usr/include/stdlib.h:748: note: candidates are: int abs(int)
|
| Cette erreur n'apparait pas a mon travail...
| Quelqu'un a-t-il une explication?

CEci devrait être une FAQ.

#include <cmath>

-- Gaby
Avatar
Gabriel Dos Reis
fanny & michou writes:

| > On Fri, 10 Sep 2004 23:17:19 +0200, fanny & michou
| > :
| >
| >>Graph.cpp:467: error: call of overloaded `abs(double)' is ambiguous
| > Si je ne m'abuse, "int abs(int)" est déclaré dans stdlib.h et "double
| > abs (double)" dans math.h. Ça vient peut-être de là...
| >
| J'ai pourtant #include <math.h> dans mon fichier...

Il te faut

#include <cmath>

-- Gaby
Avatar
Bertrand Lenoir-Welter
Si je ne m'abuse, "int abs(int)" est déclaré dans stdlib.h et "double
abs (double)" dans math.h. Ça vient peut-être de là...


Il me semble que tu t'abuses. Le help de Borland sur <math.h> propose
bien "abs", mais il renvoie à <stdlib.h> sur de l'entier. Pour du
flottant double ou long double, c'est "fabs" ou "fabsl".

Avatar
Gabriel Dos Reis
Bertrand Lenoir-Welter writes:

| > Si je ne m'abuse, "int abs(int)" est déclaré dans stdlib.h et "double
| > abs (double)" dans math.h. Ça vient peut-être de là...
|
| Il me semble que tu t'abuses. Le help de Borland sur <math.h> propose
| bien "abs", mais il renvoie à <stdlib.h> sur de l'entier. Pour du
| flottant double ou long double, c'est "fabs" ou "fabsl".

Pour du flottant double, float ou long double, C++ définit abs() dans
<cmath> et <math.h>. Mais vu ce qui se passe avec beaucoup
d'implémentations, on a plus de chance d'avoir abs(double) dans
<cmath> que dans <math.h>.

De toute façon, c'est de l'hystérie d'avoir surcharger abs() de cette
façon.

-- Gaby