C++ Windows.h 的问题,在 vs17 中非法声明匿名'struct'



编译以下代码时,我收到以下错误:

Error C2467 illegal declaration of anonymous 'struct'
C:Program Files (x86)Windows Kits10Include10.0.18362.0umwinnt.h 12723
Error C2133 '_IMAGE_POLICY_METADATA::Policies': unknown size
C:Program Files (x86)Windows Kits10Include10.0.18362.0umwinnt.h 20801
Error C2467 illegal declaration of anonymous 'struct'
C:Program Files (x86)Windows Kits10Include10.0.18362.0umwinioctl.h 4327

代码:

#include <iostream>
#include <chrono>
#include <thread>
#include <windows.h>
using namespace std;
int main()
{
std::cout << "Timer!n Enter a number of seconds: n";
int n;
std::cin >> n;
std::this_thread::sleep_for(std::chrono::milliseconds(n*1000));
std::cout << "Timer is up";
std::cout << 'a';
return 0;
}

删除windows.h时不会发生这些错误,因为我有点新,我可能会犯一个基本错误,但是很多教程都使用它,它根本不想工作。我使用了一个非常基本的代码片段,以便更容易确定它是代表我的错误还是其他地方的错误。

视窗 10, 视觉工作室 2019 16.2.5

正如@FrançoisAndrieux注释中提到的,windows.h标题不需要启用C/C++ -> Language(切换/Za(下的"禁用语言扩展"选项。

但是,如果您只想编译不需要windows.h的简单代码,只需将其删除即可。你可以写:

#include <iostream>
#include <chrono>
#include <thread>
int main()
{
std::cout << "Timer!n Enter a number of seconds: n";
int n;
std::cin >> n;
std::this_thread::sleep_for(std::chrono::milliseconds(n*1000));
std::cout << "Timer is upa";
return 0;
}

两个错误描述都与该开关有关,正如@Acorn所说。以下链接是Microsoft的官方文件。如果你不能用这种方式解决你的问题。也许您需要考虑使用 VS 工具来修复您的环境。

https://learn.microsoft.com/en-us/cpp/error-messages/compiler-errors-1/compiler-error-c2467?view=vs-2015 https://learn.microsoft.com/en-us/cpp/error-messages/compiler-errors-1/compiler-error-c2133?view=vs-2015

最新更新