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>