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++ 第一个报告的错误总是问题
真的很简单,这张照片说明了问题,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++ 第一个报告的错误总是问题