




Убедитесь, что ваш код включает файл заголовка windows.h, и ваш код или другие сторонние заголовки имеют собственные определения мин () / Максимум(). Если да, то добавьте к включению windows.h определение НОМИНМАКС следующим образом:
#define NOMINMAX
#include <windows.h>
Ух ... разгляди, чувак: std::min(), std::max().
Вам все равно нужно #define NOMINMAX, иначе препроцессор все равно расширит min и max.
Я не использовал его годами, но, возможно, из-за буста памяти также назначаются min и max?
Другая возможность может быть связана с побочными эффектами. Большинство макросов min / max будут включать параметры несколько раз и могут не делать то, что вы ожидаете. Также могут быть сгенерированы ошибки и предупреждения.
max(a,i++) expands as ((a) > (i++) ? (a) : (i++))The () in the expansion are to avoid problems if you call it with formulae. Try expanding max(a,b+c)afterwards i is either plus 1 or plus 2
Честно говоря, когда дело доходит до минимума / максимума, я считаю, что лучше просто определить свое собственное:
#define min(a,b) ((a) < (b) ? (a) : (b))
#define max(a,b) ((a) >= (b) ? (a) : (b))
Что, честно говоря, напрашивается на неприятности. В C++ используйте using std::swap и напишите свой собственный своп, если вы можете добиться большего, чем стандартное. На языке C в момент аренды напишите #define min(a,b) ((a) < (b) ? (a) : (b)) и УБЕДИТЕСЬ, ЧТО ВЫ НЕ НАЗЫВАЕТЕ НИЧЕГО С ПОБОЧНЫМИ ЭФФЕКТАМИ, потому что у вас будет множественная оценка.
Поскольку Windows определяет это как макрос в стиле функции, доступен следующий обходной путь:
int i = std::min<int>(3,5);
Это работает, потому что макрос min() раскрывается только тогда, когда за min следует (, а не тогда, когда за ним следует <.
Это официально самый странный вопрос о переполнении стека.