程序编译出错,缺少类型说明符;语法错误 : 缺少“;”(在标识符“PVOID64”的前面)

时间:2022-01-12 17:14:17

1>正在编译... 
1>stdafx.cpp 
1>E:/VS2005/VC/PlatformSDK/include/winnt.h(222) : error C2146: 语法错误 : 缺少“;”(在标识符“PVOID64”的前面) 
1>E:/VS2005/VC/PlatformSDK/include/winnt.h(222) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int 
1>E:/VS2005/VC/PlatformSDK/include/winnt.h(5940) : error C2146: 语法错误 : 缺少“;”(在标识符“Buffer”的前面) 
1>E:/VS2005/VC/PlatformSDK/include/winnt.h(5940) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int 
1>E:/VS2005/VC/PlatformSDK/include/winnt.h(5940) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
问题补充:我的编译环境为visual studio 2005 SP1(由于在vista下,所以还打了vs2005 for vista的补丁)。 
打开winnt.h文件,发现问题就是在winnt.h头文件中无POINTER_64的定义造成的。搜索vc下的头文件,发现在basetsd.h头文件中有POINTER_64的定义,而在winnt.h头文件中也包含了该头文件。于是直接把basetsd.h头文件中关于POINTER_64的宏定义(#define POINTER_64 __ptr64)抄过来,放在 
typedef void *PVOID; 
typedef void * POINTER_64 PVOID64; 
这两句的前面,再编译就无该问题了。 
虽然如此解决了编译问题,但总觉得不妥,于是又在网上搜了一下。发现也有人跟我一样的解决,但在microsoft的论坛上发现问题其实是头文件搜索顺序引起的。由于我安装了dxsdk9,dxsdk9的头文件搜索顺序在platformsdk之前。而在dxsdk9中也有basetsd.h头文件,而该文件无POINTER_64的定义,因此编译通不过。调整头文件搜索顺序后,编译就无问题了。