c++ - 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
解决方案
正如@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;
}
推荐阅读
- javascript - 每次调用函数时,我的状态数组都会清空
- linux - 嘿,有人可以帮我了解同步系统调用的用法吗?
- c++ - 函数返回的局部变量是否在 C++20 中自动移动?
- ftp - Azure 逻辑应用 - FTP 连接下载 zip 文件到 Blob 存储 - 输出 zip 文件损坏
- android - React Native:RNCallKeep.displayIncomingCall 不起作用
- python-3.x - 从 PIL 图像 python 中提取小区域
- regex - 在 HTML 不规则模式中使用正则表达式获取特定单词
- angular - Angular Reactive Forms - 添加动态组元素 - 单选按钮问题
- php - 如何获取 Twig 数组中的关键位置?
- git - 如何撤消 git checkout -B 分支?