Bonjour,
J'ai le code:
et l'erreur:Code:
1
2
3 std::numeric_limits<short> info; int max = info.max(); //int max = (int)info.max();
Quel est le probleme ?Citation:
error C2059: syntax error : '('
Version imprimable
Bonjour,
J'ai le code:
et l'erreur:Code:
1
2
3 std::numeric_limits<short> info; int max = info.max(); //int max = (int)info.max();
Quel est le probleme ?Citation:
error C2059: syntax error : '('
Ce code est légal, à condition d'avoir inclus <limits>, mais on préfère écrire simplementCode:int max = std::numeric_limits<short>::max();
J'ai deja essayé cette syntaxe. <limits> est bien inclu, j'ai la completion, mais en ecrivant la ligne que tu donne j'ai 2 erreurs de compil sous vc++exp:
Citation:
syntax error : '::'
'(' : illegal token on right side of '::'
Le problème doit-être que Microsoft défini une macro dont le nom est "max" dans un de ses headers et qui génère un conflit ici. Solution : ajouterou enlèver le header en question (<windows.h> may be).Code:#undef max
Tu peux aussi définir NOMINMAX avant d'inclure <windows.h>.
Exact, un #undef de max et min dans la fonction resoud le probleme.
Pour NOMINMAX je n'inclu pas windows.h dans mon code, par contre il inclut des librairies qui peuvent elles inclure Windows.h..
Peu importe, du moment que c'est fait avant ces inclusions. Voire même dans les options du préprocesseur directement.Citation:
Envoyé par NiamorH
Bonjour,
Pour info la méthode "standard" préconisée par Boost est de wrapper le nom de la méthode avec des parenthèses pour montrer au compilo que ce n'est pas d'une macro qu'on est en train de lui parler :
De cette façon on ne détruit pas les définitions de macros existantes à coup de #define et #undef.Code:int max = (std::numeric_limits<short>::max)();
Petite discussion à ce propos sur la mailing list de Boost:
http://lists.boost.org/Archives/boos.../06/106454.php
a+