uint8_t uint32_t sirve que para c++ uint32-t cstdint

c++ - sirve - uint32_t que es



''uint32_t'' no nombra un tipo (8)

Estoy intentando compilar un paquete de software C ++ que se escribió en 2007 y recibo este error:

error: ''uint32_t'' does not name a type

Esto está sucediendo en Ubuntu de 64 bits usando g ++ 4.5.2. Compila bien en CentOS de 64 bits utilizando g ++ 4.1.2.

¿Hay un #include o una bandera del compilador que me falta? ¿O debería usar typedef para asignar uint32_t a un size_t o quizás a un unsigned int ?


Agregue lo siguiente en el archivo base.mk. La siguiente 3ra línea es importante -include $ (TOP) /defs.mk

CXXFLAGS = -g -std=c++11 -O3 -W -Wall -pedantic -Wpointer-arith -Wwrite-strings -Wno-long-long $(THREADSCXXFLAGS)


Agregue lo siguiente en el archivo base.mk. La siguiente 3ra línea es importante -include $(TOP)/defs.mk

CFLAGS=$(DEBUG) -Wall -W -Wwrite-strings CFLAGS_C=-Wmissing-prototypes CFLAGS_CXX=-std=c++0x LDFLAGS= LIBS=

para evitar el #error Este archivo requiere compatibilidad con el compilador y la biblioteca para el próximo estándar ISO C ++, C ++ 0x. Este soporte es actualmente experimental y debe habilitarse con las opciones del compilador -std = c ++ 0x o -std = gnu ++ 0x


Debes incluir stdint.h

#include <stdint.h>


Las otras respuestas suponen que su compilador cumple con C ++ 11. Eso está bien si lo es. Pero, ¿y si estás usando un compilador anterior?

Recogí el siguiente truco en algún lugar de la red. Funciona lo suficientemente bien para mí:

#if defined __UINT32_MAX__ or UINT32_MAX #include <inttypes.h> #else typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef unsigned long uint32_t; typedef unsigned long long uint64_t; #endif

No es portátil, por supuesto. Pero podría funcionar para tu compilador.


Necesitas #include <cstdint> , pero eso no siempre funciona.

El problema es que algunos compiladores a menudo exportan automáticamente nombres definidos en varios encabezados o tipos proporcionados antes de que dichos estándares estuvieran establecidos.

Ahora, dije "puede que no siempre funcione". Eso es porque el encabezado cstdint es parte del estándar C ++ 11 y no siempre está disponible en los compiladores actuales de C ++ (pero a menudo lo es). El encabezado stdint.h es el equivalente en C y es parte de C99.

Para una mejor portabilidad, recomiendo usar el encabezado boost/cstdint.hpp Boost, si está dispuesto a usar boost. De lo contrario, probablemente puedas salirte con #including''ing <cstdint> .


También me encontré con el mismo problema en Mac <cstdint.h> y desafortunadamente agregar #include <stdint.h> o <cstdint.h> al archivo correspondiente no resolvió mi problema. Sin embargo, después de más búsquedas, encontré esta solución asesorando para agregar #include <sys/types.h> que funcionó bien para mí.


Tuve el mismo problema al intentar compilar una lib que descargué de Internet. En mi caso, ya había un #include <cstdint> en el código. Lo resolví agregando un:

using std::uint32_t;


si sucedió cuando incluyes el encabezado opencv.

Recomendaría cambiar el orden de los encabezados.

ponga los encabezados de opencv justo debajo del encabezado estándar de C ++.

Me gusta esto:

#include<iostream> #include<opencv2/core/core.hpp> #include<opencv2/highgui/highgui.hpp>