Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ ISO C&x2B+;禁止转发对';枚举';类型_C++_Clang - Fatal编程技术网

C++ ISO C&x2B+;禁止转发对';枚举';类型

C++ ISO C&x2B+;禁止转发对';枚举';类型,c++,clang,C++,Clang,鉴于该计划: enum E : int { A, B, C }; g++-c测试.cpp工作正常。但是,clang++-c test.cpp给出了以下错误: test.cpp:1:6: error: ISO C++ forbids forward references to 'enum' types enum E : int ^ test.cpp:1:8: error: expected unqualified-id enum E : int ^ 2 error

鉴于该计划:

enum E : int
{
    A, B, C
};
g++-c测试.cpp
工作正常。但是,
clang++-c test.cpp
给出了以下错误:

test.cpp:1:6: error: ISO C++ forbids forward references to 'enum' types
enum E : int
     ^
test.cpp:1:8: error: expected unqualified-id
enum E : int
       ^
2 errors generated.

这些错误消息对我来说毫无意义。我在这里没有看到任何正向引用。

为枚举指定基础类型是C++11语言的一项功能。要获得要编译的代码,必须添加开关
-std=c++11
。这适用于GCC和Clang


对于C++03中的枚举,基础整数类型是实现定义的,除非枚举数的值不能放入整数或无符号整数。(但是,自VS2005以来,Microsoft的编译器允许将枚举的基础类型指定为专有扩展。)

FWIW,GCC now(从5或6开始)编译时默认使用
-std=c++14
,而Clang仍然使用
-std=c++98
AFAIK。我认为如果您包含编译器版本和选项,会有所帮助。这对我来说似乎是一个合理的问题,不是印刷错误,这不是一个不包含代码和错误消息的问题,而是一个寻求调试帮助的问题。我们没有投票,但是当您使用c++11功能并收到奇怪的错误消息时,使用
-std=c++11
是第一件要尝试的事。当时我不知道这是一个c++11功能。语法不是新的-MS编译器至少从VS2005开始就支持此语法。你说得对:如果使用选项-std=c++11编译,则为works()。如果gcc大于6,则会给您一个明确的警告。对于gcc 6,std标志没有nead。@Christophe:也就是说:对于gcc 6,他们(最终)默认将其更改为编译C++11,并且需要一个开关以符合旧标准。