Erros estranhos de C++ com código que possui chamadas min()/max()
Pergunta
Estou vendo erros estranhos quando meu código C++ tem chamadas min() ou max().Estou usando compiladores Visual C++.
Solução
Verifique se o seu código inclui o janelas.h arquivo de cabeçalho e seu código ou outros cabeçalhos de terceiros têm seus próprios min()/máximo() definições.Se sim, então acrescente seu janelas.h inclusão com uma definição de NOMINMAX assim:
#define NOMINMAX
#include <windows.h>
Outras dicas
Outra possibilidade pode ser devido a efeitos colaterais.A maioria das macros min/max incluirá os parâmetros várias vezes e podem não fazer o que você espera.Erros e avisos também podem ser gerados.
max(a,i++) expands as ((a) > (i++) ? (a) : (i++))O () na expansão serve para evitar problemas se você chamá-lo com fórmulas.Tente expandir max(a,b+c)depois eu é mais 1 ou mais 2
Como o Windows define isso como uma macro de estilo de função, a seguinte solução alternativa está disponível:
int i = std::min<int>(3,5);
Isso funciona porque a macro min()
é expandido somente quando min
é seguido pela (
, e não quando é seguido por <
.
Eca...escopo, cara: std::min()
, std::max()
.
Não o uso há anos, mas o aumento de memória atribui mínimo e máximo também, possivelmente?
Honestamente, quando se trata de mínimo/máximo, acho melhor apenas definir o meu:
#define min(a,b) ((a) < (b) ? (a) : (b))
#define max(a,b) ((a) >= (b) ? (a) : (b))