我的代码包含
行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也显示了这种行为。)
答案 0 :(得分:1)
std::int8_t
不是内置类型。与所有其他精确宽度类型一样,它是内置类型的可选typedef,仅当您的系统具有适当类型的宽度时才会出现。这个和其他可用的std::[u]int*_t
类型在<cstdint>
中定义。因此,您需要#include <cstdint>
。
正如我的上一段所示,您还应该指定std::
命名空间限定符,因为<c*>
标题中的stdlib符号不需要在全局命名空间中可用。
据推测,<iostream>
以前通过某种途径间接地包括<cstdint>
,但你不应该依赖它;你应该为你使用的每个库符号#include
正确的标题。
然后关于struct
的事情是由另一个未知基础类型的主要问题引起的红鲱鱼;见Elaborated-type-specifier for a scoped enum must not use the ‘class’ keyword,现在我看到它,几乎与你的问题完全重复。