尝试通过windows.h编译包含winnt.h的文件时,出现以下错误:
MyGl.cpp ..\microsoft sdks\windows\v6.0a\include\winnt.h(964) : error C2988: unrecognizable template declaration/definition ..\microsoft sdks\windows\v6.0a\include\winnt.h(964) : error C2059: syntax error : '&'
They point to the following lines in Winnt.h
extern "C++" // templates cannot be declared to have 'C' linkage
template <typename T, size_t N>
char (*RtlpNumberOf( UNALIGNED T (&)[N] ))[N];
#define RTL_NUMBER_OF_V2(A) (sizeof(*RtlpNumberOf(A)))
有什么想法吗?
我的编译器:
适用于80x86的Microsoft(R)32位C/C++优化编译器版本15.00.21022.08
版权所有(C)Microsoft Corporation。版权所有。
最佳答案
至少有两种方法可以做到这一点。首先是简单地在所有文件的顶部包括windows.h
。然后仅在需要时才添加winnt.h
。但是,我发现这有点太多了-我认为没有必要在每个文件中都包含所有这些信息。
我要做的是在C/C++头文件的最顶部(第一件事)。
#ifndef __wtypes_h__
#include <wtypes.h>
#endif
#ifndef __WINDEF_
#include <windef.h>
#endif
这将为您提供数据类型,定义和基本的Windows API。您可能还需要添加以下内容:
#ifndef _WINUSER_
#include <winuser.h>
#endif
#ifndef __RPC_H__
#include <rpc.h>
#endif
WinNT有点特殊-如果包含上述文件对您有用,请不要包括它。如果确实需要,请将其包含在
wtypes.h
和`windef.h'之后如果这不起作用,请检查您的包含路径和预定义的宏,看看它们是否可能破坏您的构建。
问候,Foredecker
关于c++ - 处理Winnt.h的奇怪的编译错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/257134/