предупреждение C4003 и ошибок C2589 и C2059 на: x = станд.:: numeric_limits <интервал>:: макс. ();

Эта строка работает правильно в маленькой тестовой программе, но в программе, для которой я хочу ее, я получаю следующие жалобы на компилятор:

#include <limits>

x = std::numeric_limits<int>::max();

c:\...\x.cpp(192) : warning C4003: not enough actual parameters for macro 'max'
c:\...\x.cpp(192) : error C2589: '(' : illegal token on right side of '::'
c:\...\x.cpp(192) : error C2059: syntax error : '::'

Я получаю те же результаты с:

#include <limits>
using namespace std;

x = numeric_limits<int>::max();

Почему это, видя макс. как макрос макс. (a, b);?

56
задан Phil Miller 15 February 2011 в 15:56
поделиться

2 ответа

Обычно это происходит при включении заголовка Windows, который определяет макрос min или max . Если вы используете заголовки Windows, поместите в код #define NOMINMAX или выполните сборку с эквивалентным переключателем компилятора (т. Е. Используйте / DNOMINMAX для Visual Studio).

Обратите внимание, что построение с NOMINMAX отключает использование макроса во всей вашей программе. Если вам нужно использовать операции min или max , используйте std :: min () или std :: max () из заголовок .

74
ответ дан 26 November 2019 в 17:05
поделиться

Другой файл заголовка загрязняет глобальное пространство имен макросом max. Вы можете исправить это, отменив определение макроса:

#undef max
x = std::numeric_limits<int>::max();
27
ответ дан 26 November 2019 в 17:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: