当前位置:  开发笔记 > 编程语言 > 正文

处理Winnt.h的奇怪的编译错误

如何解决《处理Winnt.h的奇怪的编译错误》经验,为你挑选了1个好方法。

当试图通过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 : '&'

他们指向Winnt.h中的以下行

extern "C++" // templates cannot be declared to have 'C' linkage
template 
char (*RtlpNumberOf( UNALIGNED T (&)[N] ))[N];

#define RTL_NUMBER_OF_V2(A) (sizeof(*RtlpNumberOf(A)))

对于发生了什么的任何想法?

我的编译器:

Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.21022.08 for 80x86
Copyright (C) Microsoft Corporation.  All rights reserved.

Foredecker.. 12

至少有两种方法可以做到这一点.第一种是简单地包含windows.h在所有文件的顶部.然后winnt.h仅在您需要时包括.但是,我发现这有点太多了 - 我不认为需要在每个文件中包含所有这些goo.

我所做的就是在我的C/C++头文件中的最顶层(第一件事).

#ifndef __wtypes_h__
#include 
#endif

#ifndef __WINDEF_
#include 
#endif

这将为您提供数据类型,定义和基本Windows API.您可能还需要添加以下内容:

#ifndef _WINUSER_
#include 
#endif

#ifndef __RPC_H__
#include 
#endif

WinNT是一种特殊的动物 - 如果包含上述文件适合您,请不要包含它.如果确实需要它,请在wtypes.h"windef.h" 之后加入它.

如果这不起作用,请检查包含路径和预定义宏,看看这些是否会破坏您的构建.

此致,Foredecker



1> Foredecker..:

至少有两种方法可以做到这一点.第一种是简单地包含windows.h在所有文件的顶部.然后winnt.h仅在您需要时包括.但是,我发现这有点太多了 - 我不认为需要在每个文件中包含所有这些goo.

我所做的就是在我的C/C++头文件中的最顶层(第一件事).

#ifndef __wtypes_h__
#include 
#endif

#ifndef __WINDEF_
#include 
#endif

这将为您提供数据类型,定义和基本Windows API.您可能还需要添加以下内容:

#ifndef _WINUSER_
#include 
#endif

#ifndef __RPC_H__
#include 
#endif

WinNT是一种特殊的动物 - 如果包含上述文件适合您,请不要包含它.如果确实需要它,请在wtypes.h"windef.h" 之后加入它.

如果这不起作用,请检查包含路径和预定义宏,看看这些是否会破坏您的构建.

此致,Foredecker


关于这个答案的一个奇怪的部分是问题``winnt.h`是通过`windows.h`包含的,所以在什么条件下你需要包括`winnt.h`,这样的答案如何解决鉴于它是通过`windows.h`包含的问题?它似乎是你的全部声明:**检查你的包含路径和预定义的宏,看看那些可能是破坏你的构建**是唯一的原因(我敢说,已经解决)下划线问题..
推荐阅读
云聪京初瑞子_617
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有