Pergunta

Estou vendo erros estranhos quando meu código C++ tem chamadas min() ou max().Estou usando compiladores Visual C++.

Foi útil?

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++))

depois eu é mais 1 ou mais 2

O () na expansão serve para evitar problemas se você chamá-lo com fórmulas.Tente expandir max(a,b+c)

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))
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top