找不到'uint32_t'标识符错误


94

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

Visual C ++不知道,#include <stdint.h>所以我将其注释掉。

后来,我发现了很多这样的'uint32_t': identifier not found错误。如何解决?


您要评论哪些内容?
丹尼尔·A·怀特

3
而且,您正在使用Visual C ++的哪个版本?在uint32_t和其他精确宽度的整数类型只有C99和C ++ 0x中的一部分,所以旧的编译器(如Visual C ++ 2008和更早版本)没有他们。
James McNellis 2011年

非常多 !!!#include <stdint.h> #include <syslog.h> #include <linux / stddef.h> #include <pthread.h> #include <unistd.h>谢谢!!!
凯文

我正在使用Visual C ++ express 2008。
凯文

4
@kevin:您不能只删除平台特定的头文件而忘记它们。您必须找到新平台的替代品。这通常涉及大量重写代码以使其可移植。
Lightness Races in Orbit

Answers:


114

此类型在C标头中定义,C标头<stdint.h>是C ++ 11标准的一部分,但不是C ++ 03中的标准。根据标题上的Wikipedia页面,Visual Studio直到VS2010才提供。

同时,您可以通过添加typedefs来伪造您自己的标头版本,该s将Microsoft的自定义整数类型映射到C期望的类型。例如:

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

希望这可以帮助!


4
您还可以使用Boost的cstdint实现。
Peter Huene

我将您的代码复制并粘贴到我的页面上。但它显示此错误“语法错误:缺少';' 在标识符'int32_t'之前”和“缺少类型说明符-假定为int。注意:C ++不支持default-int”。
凯文

抱歉,彼得,我是C的新手。Boost的cstdint实现是什么?
凯文

3
微软的固定大小整数类型不以“ t”结尾。试试吧__int32
Ben Voigt'3

1
u_int32_t并且uint32_t不是同一类型;u。之后有一个下划线。这似乎是一个单独的问题。
templatetypedef

78

你可以#include <cstdint>。自2011年以来,它已成为C ++标准的一部分。


1
鉴于问题的约束,例如C ++和VS2010,这应该是可接受的答案。无需滚动自己的typedef。
jww

7

我有相同的错误,它已将其修复,包括文件中的以下内容

#include <stdint.h>

在文件的开头。


正如问题中指出的那样,stdint.h不是OP使用的C ++编译器的一部分。这个答案没有解决这个问题。
IInspectable




0

我必须在VS2010中运行项目,并且无法在代码中进行任何修改。我的解决方案是安装vS2013,并在VS2010中将VC ++目录-> IncludeDirectories指向程序文件(x86)\ Microsoft Visual Studio 12.0 \ VC \ include。然后我的项目编译没有任何问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.