Error de identificador no encontrado 'uint32_t'

94

Estoy transfiriendo código de Linux C a Visual C ++ para Windows.

Visual C ++ no lo sabe, #include <stdint.h>así que lo comenté.

Más tarde, encontré muchos de esos 'uint32_t': identifier not founderrores. ¿Cómo se puede solucionar?

Kevin
fuente
¿Qué incluye estás comentando?
Daniel A. White
3
¿Y qué versión (s) de Visual C ++ está utilizando? El uint32_ty otros tipos de enteros de ancho exacto son solo una parte de C99 y C ++ 0x, por lo que los compiladores más antiguos (como Visual C ++ 2008 y anteriores) no los tienen.
James McNellis
Bastante !!! #include <stdint.h> #include <syslog.h> #include <linux / stddef.h> #include <pthread.h> #include <unistd.h> Gracias !!!
Kevin
Estoy usando Visual C ++ express 2008.
Kevin
4
@kevin: No puedes simplemente eliminar los encabezados específicos de la plataforma y olvidarte de ellos. Tienes que buscar alternativas para la nueva plataforma. Esto a menudo implica una cierta cantidad de reescritura de su código para hacerlo portátil.
Lightness Races in Orbit

Respuestas:

114

Este tipo se define en el encabezado C, <stdint.h>que es parte del estándar C ++ 11 pero no estándar en C ++ 03. Según la página de Wikipedia en el encabezado , no se envió con Visual Studio hasta VS2010.

Mientras tanto, probablemente podría falsificar su propia versión del encabezado agregando typedefs que mapeen los tipos de enteros personalizados de Microsoft a los tipos esperados por C. Por ejemplo:

typedef __int32 int32_t;
typedef unsigned __int32 uint32_t;
/* ... etc. ... */

¡Espero que esto ayude!

templatetypedef
fuente
4
También puede utilizar la implementación cstdint de Boost.
Peter Huene
Copio y pego tu código en mi página. Pero muestra este error "error de sintaxis: falta ';' antes del identificador 'int32_t' "y el" especificador de tipo faltante - se asume int. Nota: C ++ no admite default-int ".
Kevin
Lo siento Peter, soy nuevo en C. ¿Qué es la implementación cstdint de Boost?
Kevin
3
Los tipos enteros de tamaño fijo de Microsoft no terminan en "t". Prueba solo __int32.
Ben Voigt
1
u_int32_ty uint32_tno son del mismo tipo; uno tiene un guión bajo adicional después del u. Eso parece un problema aparte.
templatetypedef
78

Puede #include <cstdint>. Es parte de C ++, estándar desde 2011.

Tigerle
fuente
1
Esta probablemente debería ser la respuesta aceptada dadas las limitaciones de la pregunta, como C ++ y VS2010. No es necesario lanzar sus propias definiciones de tipo.
jww
7

Tengo el mismo error y lo solucionó incluyendo en el archivo lo siguiente

#include <stdint.h>

al comienzo de su archivo.

Nacho barreto
fuente
Como se señaló en la pregunta, stdint.h no es parte del compilador de C ++ que está usando el OP. Esta respuesta no responde a la pregunta.
Inspectable
7

Impulsar . Config ofrece estas definiciones de tipo para conjuntos de herramientas que no las proporcionan de forma nativa. La documentación para esta funcionalidad específica está aquí: Tipos de enteros estándar

ildjarn
fuente
3

Hay una implementación disponible en la página del proyecto msinttypes : "Este proyecto llena la ausencia de stdint.hy inttypes.h en Microsoft Visual Studio".

No tengo experiencia con esta implementación, pero la he visto recomendada por otros en SO.

Brandon Leiran
fuente
Esta es la implementación mejor y más utilizada.
Philippe Ombredanne
0

Tuve que ejecutar el proyecto en VS2010 y no pude introducir ninguna modificación en el código. Mi solución fue instalar vS2013 y en VS2010 apunte VC ++ Directories-> IncludeDirectories to Program Files (x86) \ Microsoft Visual Studio 12.0 \ VC \ include. Entonces mi proyecto se compiló sin ningún problema.

Darqer
fuente