Эта строка работает правильно в маленькой тестовой программе, но в программе, для которой я хочу ее, я получаю следующие жалобы на компилятор:
#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);?
Обычно это происходит при включении заголовка Windows, который определяет макрос min
или max
. Если вы используете заголовки Windows, поместите в код #define NOMINMAX
или выполните сборку с эквивалентным переключателем компилятора (т. Е. Используйте / DNOMINMAX для Visual Studio).
Обратите внимание, что построение с NOMINMAX
отключает использование макроса во всей вашей программе. Если вам нужно использовать операции min
или max
, используйте std :: min ()
или std :: max ()
из заголовок
.
Другой файл заголовка загрязняет глобальное пространство имен макросом max. Вы можете исправить это, отменив определение макроса:
#undef max
x = std::numeric_limits<int>::max();