Bonjour,
Je ne comprend pas pourquoi le code suivant échoue à la compilation avec
VC++ 7.1 sur l'appel de f :
void f( float )
{
}
void f( double )
{
}
int main()
{
double d = 0.0;
f( std::abs( d ) );
}
main.cpp: error C2668: 'f' : appel ambigu à une fonction surchargée
main.cpp: peut être 'void f(double)'
main.cpp: ou 'void f(float)'
lors de la tentative de mise en correspondance de la liste des arguments
'(int)'
main.cpp: warning C4244: 'argument' : conversion de 'double' en 'int', perte
possible de données
Si je fais :
double d = std::abs( 0.0 );
f( d );
J'ai droit au warning.
Pourquoi std::abs( double ) renvoie un int ?
Merci de votre aide.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Falk Tannhäuser
Bonjour,
"int std::abs(int)" et "long std::abs(long)" sont déclarés dans l'en-tête <cstdlib> (§ 26.5/3-4), mais les surcharges pour "float", "double" et "long double" se trouvent dans <cmath> (§ 26.5/6).
Falk
Bonjour,
"int std::abs(int)" et "long std::abs(long)" sont déclarés
dans l'en-tête <cstdlib> (§ 26.5/3-4), mais les surcharges
pour "float", "double" et "long double" se trouvent dans
<cmath> (§ 26.5/6).
"int std::abs(int)" et "long std::abs(long)" sont déclarés dans l'en-tête <cstdlib> (§ 26.5/3-4), mais les surcharges pour "float", "double" et "long double" se trouvent dans <cmath> (§ 26.5/6).
Falk
Aurélien REGAT-BARREL
Oups j'ai rien dit. Je n'avais pas inclu <cmath>. Je ne sais pas où il trouvait le std::abs qu'il utilisait...
-- Aurélien REGAT-BARREL
Oups j'ai rien dit.
Je n'avais pas inclu <cmath>. Je ne sais pas où il trouvait le std::abs
qu'il utilisait...
Oups j'ai rien dit. Je n'avais pas inclu <cmath>. Je ne sais pas où il trouvait le std::abs qu'il utilisait...
-- Aurélien REGAT-BARREL
Jean-Marc Bourguet
Falk Tannhäuser writes:
"int std::abs(int)" et "long std::abs(long)" sont déclarés dans l'en-tête <cstdlib> (§ 26.5/3-4), mais les surcharges pour "float", "double" et "long double" se trouvent dans <cmath> (§ 26.5/6).
Une des absurdites favorites de Gaby. Il faut declarer les surcharges ensembles ou alors avec la definition d'un des types surcharges (ce peut poser probleme quand on se met a declarer des types).
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
"int std::abs(int)" et "long std::abs(long)" sont déclarés
dans l'en-tête <cstdlib> (§ 26.5/3-4), mais les surcharges
pour "float", "double" et "long double" se trouvent dans
<cmath> (§ 26.5/6).
Une des absurdites favorites de Gaby. Il faut declarer les surcharges
ensembles ou alors avec la definition d'un des types surcharges (ce
peut poser probleme quand on se met a declarer des types).
A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
"int std::abs(int)" et "long std::abs(long)" sont déclarés dans l'en-tête <cstdlib> (§ 26.5/3-4), mais les surcharges pour "float", "double" et "long double" se trouvent dans <cmath> (§ 26.5/6).
Une des absurdites favorites de Gaby. Il faut declarer les surcharges ensembles ou alors avec la definition d'un des types surcharges (ce peut poser probleme quand on se met a declarer des types).
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org