Visual Studio 2017 年忽略了 typedef

typedef ignored on Visual Studio 2017

真的很简单,这张照片说明了问题,Visual Studio2017错误:变量"InputCode"不是类型名

#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

所提供的代码没有任何问题,无论是解释为 C 还是解释为 C++。

特别是,与问题的某些评论相反,unsigned 是两种语言中 unsigned int 的标准支持别名,就像 long 是标准支持一样long int 的别名。因此 typedef 声明本身没有固有问题,实际上,VS 没有 标志。

只要 typedef 声明在范围内,它声明的标识符——在本例中为 InputCode——就可以用作类型名称,正如代码所期望的那样。因此 struct KeyboardInfo 声明也没有问题。

如果 Visual Studio 编译器或 IDE 抱怨所提供的代码,则构成 Visual Studio 中的缺陷。但是,您可能会发现 VS 成功编译了代码,尽管 IDE 标记了其中的问题。

我发现问题不在编译时得到的第一个错误,而是在后面报的一个错误。非常奇怪的行为,使用 gcc 或 g++ 第一个报告的错误总是问题