visual numero lpp linea instruccion identificador fin etiqueta esperaba error declaracion c++

c++ - numero - std:: max-se esperaba un identificador



se esperaba un identificador visual basic (5)

Estoy teniendo un problema con std::max . No puedo resolverlo.

int border = 35; int myInt = 2; int myOtherInt = 3; int z = std::max(myInt + 2 * border, myOtherInt + 2 * border);

He incluido el encabezado estándar del algoritmo. Cuando muevo el mouse sobre max, obtengo:

Error: se esperaba un identificador

Y un error de compilación de:

error C2589: ''('' : token ilegal en el lado derecho de ''::''
error C2059: error de sintaxis: ''::''

¿Qué está mal?


¿Has probado usar ::std::max lugar? Si esto no funciona, algo está jugando con tu espacio de nombres estándar.


Diría que max es #define a otra cosa o que necesitas invocar explícitamente la plantilla a través de std::max<int> .


La declaración de "uso" (consulte el uso de Declaración ) es otra forma de evitar el problema:

int border = 35; int myInt = 2; int myOtherInt = 3; using std::max; int z = max(myInt + 2 * border, myOtherInt + 2 * border);

Permite usar std :: max sin calificación explícita.


Poniendo en peligro una conjetura, ya que estás usando VC ++ - pon esto antes de cualquier #include s:

#define NOMINMAX

windows.h define las macros denominadas min y max manera:

#define min(a,b) (((a) < (b)) ? (a) : (b)) #define max(a,b) (((a) > (b)) ? (a) : (b))

El SDK de Windows ha contenido estas macros desde antes de que C ++ estuviera estandarizado, pero como obviamente NOMINMAX estragos en la biblioteca estándar de C ++, se puede definir la macro NOMINMAX para evitar que se definan.

Como regla, si usa C ++ (en lugar de C) e incluye windows.h , siempre defina primero NOMINMAX .


Si usa VC ++, puede usar #define NOMINMAX antes de incluir cualquier encabezado, o do (std::max)(myInt + 2 * border, myOtherInt + 2 * border)