ProgramingTip

'uint32_t'는 유형의 이름을 지정하지 않습니다.

bestdevel 2020. 11. 16. 21:57
반응형

'uint32_t'는 유형의 이름을 지정하지 않습니다.


2007 년에 안전하게 C ++ 소프트웨어 패키지를 구축하려고합니다.

error: ‘uint32_t’ does not name a type

이것은 g ++ 4.5.2를 사용하는 64 비트 Ubuntu에서 발생합니다. g ++ 4.1.2를 사용하여 64 비트 CentOS에서 잘 선택합니다.

거기에 #include내가 부족 또는 컴파일러 플래그는? 또는 typedef내가 할당 uint32_tA를 size_t또는 어쩌면 unsigned int?


stdint.h를 포함해야합니다.

 #include <stdint.h>

필요는 #include <cstdint>하지만 항상 작동하는 [해석] 아닙니다.

문제는 일부 컴파일러가 표준이 설치되기 전에 다양한 헤더 유형에 정의되어있는 이름을 자동으로입니다.

자, "항상 작동하지 않을 수도 있습니다." 이것은 cstdint 헤더가 C ++ 11 표준의 일부이고 현재 C ++ 컴파일러에서 항상 사용할 수있는 것은 아니기 때문입니다 (하지만 종종 그렇습니다). stdint.h 헤더는 C와 동일하며 C99의 일부입니다.

최상의 이식을 위해 Boost boost/cstdint.hpp사용하는 것이 좋습니다. 아마도 # include'ing을 사용할 수있을 것입니다 <cstdint>.


나는 또한 맥 OSX 10.6.8 동일한 문제가에서 발생했으며 불행히도 해당 파일을 추가 #include <stdint.h>하거나 추가해도 <cstdint.h>문제가 해결되지 않았습니다. 더 많은 검색 그러나 후이 솔루션을 추가 #include <sys/types.h>하는 것이 좋습니다 .


다른 답변은 컴파일러가 C ++ 11을 준수 가정합니다. 괜찮습니다. 하지만 오래된 컴파일러를 사용한다면 어떨까요?

나는 인터넷 어딘가에서 다음 해킹을 집어 들었다. 그것은 나를 위해 충분히 잘 작동합니다.

  #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

물론 아닙니다. 그러나 컴파일러에서는 작동 할 수 있습니다.


base.mk 파일에 다음을 추가하십시오. 다음 세 번째 줄이 중요합니다-include $(TOP)/defs.mk

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

#error를 방지하려면 파일이 곧 출시 될 예정입니다. ISO C ++ 표준 인 C ++ 0x에 대한 컴파일러 및 라이브러리 지원이됩니다. 이 지원은 현재 실험적이며 -std = c ++ 0x 또는 -std = gnu ++ 0x 컴파일러 옵션을 사용하여 활성화해야합니다.


opencv 헤더를 포함 할 때 경우.

순서를 변경하는 것이 좋습니다.

표준 C ++ 헤더 바로 아래에 opencv 헤더를 추천하십시오.

이렇게 :

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

인터넷에서 다운로드 한 lib를 사용하는 데 동일한 문제가 발생했습니다. 제 경우에는 이미 #include <cstdint>코드에 있습니다. 다음을 추가하여 해결했습니다.

using std::uint32_t;

/ usr / include / x86_64-linux-gnu / bits 이동하여 stdint-uintn.h를 다음 행을 추가하십시오.

typedef __uint8_t uint8_t;
typedef __uint16_t uint16_t;
typedef __uint32_t uint32_t;
typedef __uint64_t uint64_t;

다시 stdint-intn.h를

typedef __int8_t int8_t;
typedef __int16_t int16_t;
typedef __int32_t int32_t;
typedef __int64_t int64_t;

이 줄은 이미 존재합니다. 그냥 복사하여 누락 된 줄을 추가하면됩니다.

참고 URL : https://stackoverflow.com/questions/11069108/uint32-t-does-not-name-a-type

반응형