Ошибка C2589 в std :: numeric_limits <double>:: min () - PullRequest
4 голосов
/ 01 декабря 2009

Когда я пытаюсь скомпилировать некоторый код (не мой), я получаю C2589 '(': нелегальный токен справа от '::'

в этой строке:

    maxPosition[0]=std::numeric_limits<double>::min();

Полагаю, это потому, что уже определен макрос min (), но почему компилятор не берет min () из указанного пространства имен вместо макроса?

Ответы [ 2 ]

7 голосов
/ 15 декабря 2009

но почему компилятор не берет min () из указанного пространства имен вместо макроса?

Поскольку макросы не заботятся о ваших пространствах имен, семантике языка или вашем компиляторе. Предварительная обработка происходит first .

Другими словами, компилятор видит только то, что осталось после этапа предварительной обработки. И min был заменен некоторой строкой замены, и результат - то, что увидел компилятор.

0 голосов
/ 22 марта 2019

Нажатие клавиши F12 при нарушении функции std :: numeric_limits :: min ()

Приводит туда, где как :

c: \ Program Files (x86) \ Windows Kits \ 8.1 \ Include \ shared \ minwindef.h

Где вы найдете:

#ifndef NOMINMAX

#ifndef max
#define max(a,b)            (((a) > (b)) ? (a) : (b))
#endif

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

Итак, добавив

#define NOMINMAX

вверху вашего файла .cpp (как это делает WINAPI: см. Windows.h в качестве примера), прежде чем любые заголовки #include должны устранить проблему.

...