C ++ Проблемы с windows.h, незаконное объявление анонимной структуры в vs17 - PullRequest
3 голосов
/ 20 сентября 2019

Когда компилируется следующий код, я получаю эти ошибки:

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

Ответы [ 2 ]

1 голос
/ 20 сентября 2019

Как отмечает @ 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 up\a";
    return 0;
}
0 голосов
/ 23 сентября 2019

Оба эти описания ошибок связаны с этим переключателем, как и @Acorn.Ссылка ниже является официальным документом Microsoft.Если вы не можете решить свою проблему таким образом.Возможно, вам нужно рассмотреть возможность использования инструмента VS для восстановления вашей среды.

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

...