117 votes

std::min donne erreur

#include <algorithm>
#include <Windows.h>

int main()
{
    int k = std::min(3, 4);
    return 0;
}

Qu'est-ce que windows fait, si je comprend Windows.h je ne peux utiliser std::min dans visual studio 2005. Le message d'erreur est:

error C2589: '(' : illegal token on right side of '::'
error C2059: syntax error : '::'

173voto

paxdiablo Points 341644

L' windows.h fichier d'en-tête (ou plus correctement, windef.h qu'il comprend à son tour) a des macros pour min et max qui interfèrent.

Vous devriez #define NOMINMAX avant de l'inclure.

101voto

PolyMesh Points 352

Aucun besoin de définir quoi que ce soit, juste de contournement de la macro à l'aide de cette syntaxe:

(std::min)(a, b); // added parentheses around function name
(std::max)(a, b);

28voto

Gene Bushuyev Points 3819

Comme d'autres l'ont mentionné, les erreurs sont dues à des min/max macros qui sont définis dans l'en-tête windows(s). Il y a trois façons de les désactiver.

1) #define NOMINMAX avant y compris en-tête, c'est généralement une mauvaise technique de définir des macros afin d'influer sur les en-têtes suivants;

2) définir NOMINMAX dans le compilateur de ligne de commande/IDE. La mauvaise partie au sujet de cette décision est que si vous voulez expédier vos sources, vous avez besoin d'avertir les utilisateurs à faire de même;

3), il suffit d'annuler la définition des macros dans votre code avant de servir

#undef min
#undef max

C'est probablement le plus portable et une solution flexible.

16voto

Jerry Coffin Points 237758

Essayez quelque chose comme ceci:

#define NOMINMAX
#include <windows.h>

1voto

sstn Points 1692

Je suppose que windows.h n'définir min comme une macro, par exemple, de la

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

Qui pourrait expliquer le message d'erreur.

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