typedef игнорируется в Visual Studio 2017 - PullRequest
0 голосов
/ 07 ноября 2019

Действительно, эта фотография объясняет проблему, ошибка Visual Studio 2017: переменная «InputCode» не является именем типа

enter image description here

#ifndef INPUT_H
#define INPUT_H

typedef unsigned InputCode;

struct KeyboardInfo
{
    char *name; /* OS dependant name; 0 terminates the list */
    unsigned code; /* OS dependant code */
    InputCode standardcode; /* CODE_xxx equivalent from list below, or CODE_OTHER if n/a */
};
#endif

Ответы [ 2 ]

3 голосов
/ 07 ноября 2019

В представленном коде нет ничего плохого ни в интерпретации C, ни в интерпретации C ++.

В частности, вопреки некоторым комментариям по этому вопросу, unsigned поддерживается стандартомпсевдоним для unsigned int на обоих языках, так же как long является стандартным поддерживаемым псевдонимом для long int. Таким образом, нет никакой внутренней проблемы с самой декларацией typedef, которая, на самом деле, VS не помечает флагом.

Везде, где объявление typedef находится в области видимости, идентификатор, который он объявляет -- InputCode в этом случае - допустимо для использования в качестве имени типа, именно так, как кажется, код ожидает. Поэтому нет никаких проблем с объявлением struct KeyboardInfo.

Если компилятор Visual Studio или IDE жалуется на представленный код, то это является недостатком в Visual Studio. Однако вы можете обнаружить, что VS успешно компилирует код, несмотря на то, что IDE помечает проблему в нем.

0 голосов
/ 07 ноября 2019

Я обнаружил, что проблема была не в первой ошибке, полученной во время компиляции, а в ошибке, о которой сообщалось позже. Очень странное поведение, при использовании gcc или g ++ первая сообщаемая ошибка всегда является проблемой

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...