语法错误:缺少';'在编译winnt.h时在标识符'PVOID64'之前

时间:2012-03-29 10:32:57

标签: c++ windows visual-studio-2010

我最近在应用程序上获得了源代码。当我尝试构建解决方案时,我在包含winnt.h的所有部分都收到错误。错误代码略有不同,但它们总是指向winnt.h中的这些行:

typedef void *PVOID;
typedef void * POINTER_64 PVOID64;

struct {
    DWORD crc;
    BYTE  rgbReserved[14];
} CRC;

那么,原因可能是什么? winnt.h是标准头文件,尚未修改。是否与使用VS 2010或使用64位窗口的我有关?或者是否需要某种配置?

编辑: 这是确切的错误代码:

1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winnt.h(290): error C2146: syntax error : missing ';' before identifier 'PVOID64'
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winnt.h(290): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winnt.h(8992): error C2146: syntax error : missing ';' before identifier 'Buffer'
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winnt.h(8992): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winnt.h(8992): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winnt.h(11525): error C2059: syntax error : 'constant'
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winnt.h(11525): error C2238: unexpected token(s) preceding ';'
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winnt.h(11556): error C2059: syntax error : 'constant'
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winnt.h(11556): error C2238: unexpected token(s) preceding ';'

6 个答案:

答案 0 :(得分:10)

您需要包含windows.h而不是winnt.h。如果您加入windows.h,则会包含winnt.h。您需要以这种方式执行此操作,以便编译winnt.h所需的必要宏。

在这种情况下,POINTER_64BaseTsd.h中定义如下:

#define POINTER_64 __ptr64

但如果您在加入winnt.h之前加入windows.h,则POINTER_64未定义。

答案 1 :(得分:7)

如果您使用的是DirectX SDK,请尝试更改最后搜索的include和lib的VC ++目录。

答案 2 :(得分:2)

看起来您的Windows SDK配置无效。 此错误是由编译器无法识别“POINTER_64”语句引起的。 您可以通过将'POINTER_64'替换为'__ptr64'来解决此问题。

我最近遇到了同样的问题。然后我重新安装了最新版本的Windows SDK,这解决了这个问题。

<强>更新 @David Heffernan,正确指出一个应该包含windows.h而不是winnt.h

的事实

答案 3 :(得分:2)

如果您有DirectX SDK,请尝试删除它。

此处接受错误: http://connect.microsoft.com/VisualStudio/feedback/details/508204/vc10-0-errors-while-compiling-winnt-h

答案 4 :(得分:1)

在winnt.h中手动修正语法:

typedef void * POINTER_64 PVOID64; => typedef void * POINTER_64, * PVOID64;

答案 5 :(得分:0)

如果您使用的是librdkafka,则只要包含“Windows.h”,您就会收到此错误。

我通过将“librdkafka / include / basetsd.h”重命名为其他名称或访问来修复它 这个库头通过子路径!

我认为这个库的作者使这个文件处理OS平台的兼容性。但是使用与Windows Core相同的文件名“basetsd.h”,它只会让Visual Studio感到困惑。