我试图编译写于2007年的C ++软件包,我得到这个错误:
error: ‘uint32_t’ does not name a type
这是通过使用G ++ 4.5.2在64位的Ubuntu发生。 它编译使用克++ 4.1.2 64位的CentOS细。
是否有一个#include
我失踪或编译器标志? 或者,我应该使用typedef
分配uint32_t
到size_t
或也许一个unsigned int
?
我试图编译写于2007年的C ++软件包,我得到这个错误:
error: ‘uint32_t’ does not name a type
这是通过使用G ++ 4.5.2在64位的Ubuntu发生。 它编译使用克++ 4.1.2 64位的CentOS细。
是否有一个#include
我失踪或编译器标志? 或者,我应该使用typedef
分配uint32_t
到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>
我也遇到了在Mac OSX 10.6.8同样的问题,不幸的是添加#include <stdint.h>
或<cstdint.h>
到相应的文件并没有解决我的问题。 然而,更多的搜索后,我发现这个解决方案advicing添加#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;