advertencia C4003 y errores C2589 y C2059 en: x = std:: límites numéricos: max();
Esta línea funciona correctamente en un pequeño programa de prueba, pero en el programa para el que lo quiero, obtengo las siguientes quejas del compilador:
#include <limits>
x = std::numeric_limits<int>::max();
c:\...\x.cpp(192) : warning C4003: not enough actual parameters for macro 'max'
c:\...\x.cpp(192) : error C2589: '(' : illegal token on right side of '::'
c:\...\x.cpp(192) : error C2059: syntax error : '::'
Obtengo los mismos resultados con:
#include <limits>
using namespace std;
x = numeric_limits<int>::max();
¿Por qué está viendo max como la macro max(a,b); ?
5 answers
Esto ocurre comúnmente cuando se incluye un encabezado de Windows que define una macro min
o max
. Si está usando encabezados de Windows, ponga #define NOMINMAX
en su código, o compile con el conmutador de compilador equivalente (es decir, use /DNOMINMAX para Visual Studio).
Tenga en cuenta que la compilación con NOMINMAX
deshabilita el uso de la macro en todo el programa. Si necesita usar las operaciones min
o max
, use std::min()
o std::max()
desde el encabezado <algorithm>
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-15 01:42:34
Otra solución sería envolver el nombre de la función con paréntesis como este: (std::numeric_limits<int>::max)()
. Lo mismo se aplica a std::max
.
No estoy seguro de que sea una buena solución para esto... NOMINMAX es mejor IMO, pero esto podría ser una opción en algunos casos.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-26 14:02:06
Algún otro archivo de encabezado está contaminando el espacio de nombres global con una macro max. Puedes arreglarlo deshaciendo la macro:
#undef max
x = std::numeric_limits<int>::max();
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-15 01:11:51
#ifdef max
#pragma push_macro("max")
#undef max
#define _restore_max_
#endif
#include <limits>
//... your stuff that uses limits
#ifdef _restore_max_
#pragma pop_macro("max")
#undef _restore_max_
#endif
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-26 21:25:18
Su definición en para mí en Visual Studio 2013 (formateado para un mejor espaciado...) es el siguiente:
static _Ty (max)() _THROW0()
{ // return maximum value
return (FLT_MAX);
}
Así que solo estoy usando FLT_MAX. :) Esta puede no ser una solución universal, pero funciona bien en mi caso, así que pensé que compartiría.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-15 23:01:05