gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:09:09 26 4
gpt4 key购买 nike

尝试通过 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)))

对正在发生的事情有什么想法吗?

我的编译器:

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

最佳答案

至少有两种方法可以做到这一点。第一种是在所有文件的顶部简单地包含 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com