Странные ошибки C ++ с кодом, в котором есть вызовы min () / max () - PullRequest
6 голосов
/ 18 августа 2008

Я вижу странные ошибки, когда мой код C ++ имеет вызовы min () или max (). Я использую компиляторы Visual C ++.

Ответы [ 6 ]

17 голосов
/ 18 августа 2008

Проверьте, содержит ли ваш код заголовочный файл windows.h , и есть ли у вашего кода или других сторонних заголовков свои min () / max () определения. Если да, тогда добавьте к вашему включению windows.h определение NOMINMAX , например:

#define NOMINMAX
#include <windows.h>
2 голосов
/ 24 января 2011

Поскольку Windows определяет это как макрос в стиле функции, доступен следующий обходной путь:

int i = std::min<int>(3,5);

Это работает, потому что макрос min() раскрывается только тогда, когда за min следует (, а не когда за ним следует <.

2 голосов
/ 23 августа 2008

Другая возможность может быть от побочных эффектов. Большинство макросов min / max содержат параметры несколько раз и могут не выполнять то, что вы ожидаете Ошибки и предупреждения также могут быть сгенерированы.

max(a,i++) expands as ((a) > (i++) ? (a) : (i++))

afterwards i is either plus 1 or plus 2
() В расширении, чтобы избежать проблем, если вы вызываете его с формулами. Попробуйте расширить max (a, b + c)
1 голос
/ 18 августа 2008

Тьфу ... сфокусируйся, чувак: std::min(), std::max().

0 голосов
/ 25 ноября 2009

Честно говоря, когда дело доходит до мин / макс, я считаю, что лучше всего определить свое собственное:

#define min(a,b) ((a) < (b) ? (a) : (b))
#define max(a,b) ((a) >= (b) ? (a) : (b))
0 голосов
/ 18 августа 2008

Я не пользовался им годами, но из-за увеличения памяти тоже можно назначить мин и макс, возможно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...