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)