我正在尝试编译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_t
给asize_t
还是也许unsigned int
?
我正在尝试编译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_t
给asize_t
还是也许unsigned int
?
#include <stdint.h>
吗 看起来可能是64位Ubuntu上的错误。另外,您是否有-std=c++98
gcc的命令行选项?如果是这样,是否可以检查是否可以正常使用-std=gnu++98
?
std
选择。
Answers:
您需要包含stdint.h
#include <stdint.h>
cstdint
。
boost/cstdint.hpp
是找不到包含。yum install boost-devel
解决了我的问题。
C
用GCC?
您需要#include <cstdint>
,但这可能并不总是有效。
问题在于,某些编译器通常会在这些标准到位之前自动导出在各种标头或提供的类型中定义的名称。
现在,我说“可能并不总是有效”。这是因为cstdint标头是C ++ 11标准的一部分,并不总是在当前C ++编译器上可用(但经常是)。stdint.h标头与C等效,并且是C99的一部分。
为了获得最佳的可移植性,boost/cstdint.hpp
如果您愿意使用boost ,我建议您使用Boost的标头。否则,您可能可以摆脱#include'ing <cstdint>
。
#error This file requires compiler and library support for the upcoming ISO C++ standard, C++0x. This support is currently experimental, and must be enabled with the -std=c++0x or -std=gnu++0x compiler options.
我在Mac 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标头时发生。
我建议更改标题的顺序。
将opencv标头放在标准C ++标头的正下方。
像这样:
#include<iostream>
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
只需导航至/ 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;
请注意,这些行已经存在,只需复制并添加缺少的行即可。