首页 > 解决方案 > windows.h 的 C++ 问题,在 vs17 中非法声明匿名“结构”

问题描述

编译以下代码时,出现以下错误:

Error C2467 illegal declaration of anonymous 'struct'
  C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winnt.h 12723
Error C2133 '_IMAGE_POLICY_METADATA::Policies': unknown size
  C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winnt.h 20801
Error C2467 illegal declaration of anonymous 'struct'
  C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winioctl.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,因为我有点新,我可能会犯一个基本错误,但是很多教程都使用它,它根本不想工作。我使用了一个非常基本的代码片段,以便更容易确定它是代表我的错误还是其他地方的错误。

Windows 10、Visual Studio 2019 16.2.5

标签: c++visual-studiovisual-c++header-files

解决方案


正如@FrançoisAndrieux 在评论中提到的那样,windows.h标题不需要启用 C/C++ -> Language (switch /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 up\a";
    return 0;
}

推荐阅读