48 votes

std::max - attendu un identifiant

J'ai un problème avec std::max . Je n'arrive pas à comprendre.

int border = 35;
int myInt = 2;
int myOtherInt = 3;
int z = std::max(myInt + 2 * border, myOtherInt + 2 * border);

J'ai inclus l'en-tête standard de l'algorithme. Lorsque je passe la souris sur max, j'obtiens :

Erreur : on attendait un identifiant

Et une erreur de compilation de :

erreur C2589 : '(' : jeton illégal sur le côté droit de '::'
erreur C2059 : erreur de syntaxe : '::'

Qu'est-ce qui ne va pas ?

93voto

ildjarn Points 38377

Au hasard, puisque vous utilisez VC++ - mettez ceci avant toute #include s :

#define NOMINMAX

windows.h définit des macros nommées min y max comme ça :

#define min(a,b)            (((a) < (b)) ? (a) : (b))
#define max(a,b)            (((a) > (b)) ? (a) : (b))

Le SDK de Windows contient ces macros depuis avant que le C++ ne soit normalisé, mais comme elles jouent manifestement avec la bibliothèque standard C++, on peut définir l'option NOMINMAX pour éviter qu'ils ne soient définis.

En règle générale, si vous utilisez C++ (par opposition à C) et si vous incluez windows.h , toujours définir NOMINMAX d'abord.

24voto

Dave S Points 11381

Si vous êtes sur VC++, vous pouvez soit utiliser #define NOMINMAX avant d'inclure des en-têtes, ou faites (std::max)(myInt + 2 * border, myOtherInt + 2 * border)

4voto

Jim Buck Points 10839

Je dirais que soit max es #define à quelque chose d'autre ou vous devez invoquer explicitement le modèle par l'intermédiaire de std::max<int> .

2voto

PeterN Points 11

La déclaration "using" (voir en utilisant la déclaration ) est une autre façon de contourner le problème :

int border = 35;
int myInt = 2;
int myOtherInt = 3;
using std::max;
int z = max(myInt + 2 * border, myOtherInt + 2 * border);

Il permet d'utiliser std::max sans qualification explicite.

0voto

jweyrich Points 10002

Avez-vous essayé d'utiliser ::std::max à la place ? Si cela ne fonctionne pas, il y a un problème avec votre espace de noms std.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X