"uint32_t"标识符未找到错误

114

我正在将Linux C的代码移植到Windows的Visual C++上。

由于Visual C++不认识#include <stdint.h>,所以我对它进行了注释。

后来,我发现出现了很多'uint32_t': identifier not found错误。这该怎么解决?


你要注释掉哪个 include? - Daniel A. White
3
你使用的是哪个版本的Visual C++? uint32_t和其他精确宽度整数类型只属于C99和C++0x,所以较旧的编译器(如Visual C++ 2008及更早版本)没有这些类型。 - James McNellis
相当多!!! #include <stdint.h> #include <syslog.h> #include <linux/stddef.h> #include <pthread.h> #include <unistd.h> 谢谢!!! - kevin
我正在使用Visual C++ Express 2008。 - kevin
如果我的 VC++ 2008 不认识那些类型,我该怎么办?你有什么建议吗? - kevin
4
@kevin: 你不能只是删除平台特定的头文件并忘记它们,你必须为新平台寻找替代方案。这通常涉及重新编写代码以使其具有可移植性。 - Lightness Races in Orbit
7个回答

130

这种类型是在C头文件<stdint.h>中定义的,它是C++11标准的一部分,但不是C++03标准。根据该头文件的维基百科页面,它直到VS2010才可以在Visual Studio中使用。

与此同时,您可以通过添加typedefMicrosoft的自定义整数类型映射到C所期望的类型来伪造自己的头文件版本。例如:

typedef __int32 int32_t;
typedef unsigned __int32 uint32_t;
/* ... etc. ... */

4
你也可以使用Boost的cstdint实现。 - Peter Huene
3
微软的定长整数类型不以"t"结尾。尝试使用__int32 - Ben Voigt
1
u_int32_tuint32_t不是同一种类型;其中一个在u后面有一个额外的下划线。这似乎是一个单独的问题。 - templatetypedef
虽然你说得对,微软编译器不包括stdint.h,但我在参考的维基百科页面上找不到这个声明。 - harper
我刚遇到了这个问题,如果你正在使用包含此文件的 Visual Studio 版本,则可以将其包含在预编译头文件中,或在项目属性中指定“stdint.h”作为强制包含文件。 - mgrandi
显示剩余8条评论

95
你可以使用#include <cstdint>。这是自2011年以来C++标准的一部分。

1
这可能是最佳答案,考虑到问题的限制,如C++和VS2010。没有必要自己定义typedef。 - jww
1
@jww请看问题中的日期和OP使用的编译器版本。这是今天一个很好的答案,但不适用于原始问题。 - Mark Ransom

12

我遇到了相同的错误,解决方法是在文件中包含以下内容

#include <stdint.h>

在您的文件开头。


2
正如问题所指出的那样,stdint.h 不是 OP 正在使用的 C++ 编译器的一部分。这个答案并没有回答问题。 - IInspectable

7

3

msinttypes项目页面上有一个实现 - "该项目填补了Microsoft Visual Studio中stdint.h和inttypes.h的缺失"。

我没有使用过这个实现,但我在SO上看到其他人推荐它。


这是更好和最常用的实现方式。 - Philippe Ombredanne

2

-1
我必须在VS2010中运行项目,但不能对代码进行任何修改。我的解决方案是安装vS2013,并在VS2010中将VC++目录->包含目录指向Program Files(x86)\Microsoft Visual Studio 12.0\VC\include。然后我的项目编译没有任何问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接