C++11 ';枚举结构';韩元';除非<;iostream>;包括在内

C++11 ';枚举结构';韩元';除非<;iostream>;包括在内,c++11,struct,enums,include,enum-class,C++11,Struct,Enums,Include,Enum Class,我有包含这行代码 enum struct cols: int8_t {red, blue, green}; 编译此文件时,会出现以下错误: test.cpp:4:1: warning: elaborated-type-specifier for a scoped enum must not use the 'struct' keyword enum struct cols: int8_t {red, blue, green}; ^ test.cpp:4:13: error: use of

我有包含这行代码

enum struct cols: int8_t {red, blue, green};
编译此文件时,会出现以下错误:

test.cpp:4:1: warning: elaborated-type-specifier for a scoped enum must not use the 'struct' keyword
 enum struct cols: int8_t {red, blue, green};
 ^
test.cpp:4:13: error: use of enum 'cols' without previous declaration
 enum struct cols: int8_t {red, blue, green};
             ^
test.cpp:4:17: error: expected unqualified-id before ':' token
 enum struct cols: int8_t {red, blue, green};
                 ^
但是如果我把线

#include <iostream>
#包括
在顶部,它毫无怨言地编译

对此有何解释


(我使用的是g++4.9.4,但这种行为也在g++5.4.0中显示。)

std::int8\t
不是内置类型。与所有其他精确宽度类型一样,它是内置类型的可选typedef,仅当您的系统具有该宽度的适当类型时才出现。此类型和其他可用的
std::[u]int*\u t
类型在
中定义。因此,您需要
#包括

如上所述,您还应该指定
std::
名称空间限定符,因为
标题中的stdlib符号不需要在全局名称空间中可用

大概
以前是通过某种途径间接包括
,但你不应该依赖于此;您应该为使用的每个库符号包含正确的标题

然后,关于
struct
的问题是另一个主要问题,即未知的底层类型,所引起的麻烦;看,我现在看,这几乎是你问题的完全重复