“uint32_t的”没有指定类型('uint32_t' does not name

2019-07-29 23:35发布

我试图编译写于2007年的C ++软件包,我得到这个错误:

error: ‘uint32_t’ does not name a type

这是通过使用G ++ 4.5.2在64位的Ubuntu发生。 它编译使用克++ 4.1.2 64位的CentOS细。

是否有一个#include我失踪或编译器标志? 或者,我应该使用typedef分配uint32_tsize_t或也许一个unsigned int

Answer 1:

您需要包括stdint.h

 #include <stdint.h>


Answer 2:

你需要#include <cstdint>但可能并不总是工作。

问题是,一些编译器经常自动导出各种头文件中定义或之前,这样的标准已经到位提供类型的名称。

现在,我说:“可能并不总是可行的。” 这是因为cstdint头球的C ++ 11标准的一部分,而不是总是在当前的C ++编译器(但通常是)可用。 的stdint.h头是C等效的和是C99的一部分。

为了获得最佳的便携性,我建议使用Boost的boost/cstdint.hpp头,如果你愿意使用升压。 否则,你可能能够逃脱#include'ing <cstdint>



Answer 3:

我也遇到了在Mac OSX 10.6.8同样的问题,不幸的是添加#include <stdint.h><cstdint.h>到相应的文件并没有解决我的问题。 然而,更多的搜索后,我发现这个解决方案advicing添加#include <sys/types.h>这对我来说效果很好!



Answer 4:

其他答案假设你的编译器是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

这是不可移植的,当然。 但它可能适用于你的编译器。



Answer 5:

添加以下的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中的编译选项



Answer 6:

如果它发生了,当你包括OpenCV的头。

我想那推荐更改标题的顺序。

放只是标准C ++头下面的OpenCV头。

像这样:

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


Answer 7:

我不得不尝试编译一个lib我从互联网上下载塔同样的问题。 在我的情况下,已经有一个#include <cstdint>中的代码。 我解决了它增加了:

using std::uint32_t;


文章来源: 'uint32_t' does not name a type