NOMINMAX et std::min/max Collision
Pour activer l'utilisation des fonctions std::min et std::max de la bibliothèque standard, vous avez défini la macro NOMINMAX dans votre fichier main.cpp. Cependant, vous rencontrez des problèmes lors de l'utilisation de ces fonctions dans d'autres fichiers.
NOMINMAX est défini pour désactiver certaines définitions héritées dans les fichiers d'en-tête Windows, y compris les redéfinitions de min et max en tant que macros. En effet, dans les versions antérieures du compilateur Visual C, ces macros étaient définies par les fichiers d'en-tête Windows et pouvaient entrer en conflit avec les définitions de la bibliothèque standard.
Pour résoudre le problème, vous devez vous assurer que NOMINMAX est défini dans tous les fichiers dans lesquels vous avez l'intention d'utiliser std::min ou std::max. Cependant, le simple fait d'ajouter la définition de la macro à vos autres fichiers ne semble pas fonctionner.
En effet, la directive #define a une portée globale et affecte tout le code ultérieur du fichier. Cependant, les macros ne sont pas appliquées au code déjà prétraité. Par conséquent, la définition de NOMINMAX dans vos fichiers ultérieurs peut n'avoir aucun effet sur le code que vous avez déjà écrit.
Pour contourner ce problème, vous pouvez mettre les noms de fonctions entre parenthèses :
(std::min)(x, y);
Cette syntaxe garantira qu'une macro de type fonction n'est pas appliquée et le compilateur résoudra l'appel de fonction en std::min.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!