'uint32_t'没有命名一个types

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

error: 'uint32_t' does not name a type

这发生在使用g ++ 4.5.2的64位Ubuntu上。 它在使用g ++ 4.1.2的64位CentOS上编译得很好。

有没有一个#include或编译器国旗,我失踪了? 或者,我应该使用typedefuint32_t分配给size_t或者可能是一个unsigned int

你需要包含stdint.h

  #include <stdint.h> 

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

问题是一些编译器通常会自动导出在各种标题或提供的types中定义的名称,然后才能使用这些标准。

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

为了获得最佳的可移植性,如果你愿意使用boost,我build议使用Boost的boost/cstdint.hpp头文件。 否则,你可能会用#include <cstdint>离开。

我也在Mac OSX 10.6.8上遇到了同样的问题,不幸的是,将#include <stdint.h><cstdint.h>到相应的文件中并没有解决我的问题。 然而,经过更多的search之后,我发现这个解决scheme提醒我们添加#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头部时发生。

我会build议改变标题的顺序。

把opencv头放在标准C ++头下面。

喜欢这个:

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

我有同样的问题,试图编译我从互联网上下载的lib。 就我而言,代码中已经有一个#include <cstdint>了。 我解决了它添加一个:

 using std::uint32_t; 

在base.mk文件中添加以下内容。 以下第三行很重要 – 包括$(TOP)/defs.mk

 CXXFLAGS = -g -std=c++11 -O3 -W -Wall -pedantic -Wpointer-arith -Wwrite-strings -Wno-long-long $(THREADSCXXFLAGS)