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?


¿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!


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.


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.


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




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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.