C++ 编译错误,如预期的那样,枚举类型声明在数值常量之前 }

C++11 Compilation Error for enumerated type declaration as expected } before numeric constant

提问人:Dr. Debasish Jana 提问时间:3/22/2017 最后编辑:Dr. Debasish Jana 更新时间:3/23/2017 访问量:572

问:

我有以下源文件():test.c

#include <iostream>
enum ecodes { ENOKEY = -1, EDUPKEY = -2 };
int main()
{
  return 0;
}

当我编译时,它编译得很好。without -std=c++11

g++  test.c -o test

当使用 编译时,它带有编译错误: g++ -std=c++11 test.c -o 测试-std=c++11

test.c:3:16: error: expected identifier before numeric constant
  enum ecodes { ENOKEY = -1, EDUPKEY = -2 };
                ^
test.c:3:16: error: expected â}â before numeric constant
test.c:3:16: error: expected unqualified-id before numeric constant
test.c:3:42: error: expected declaration before â}â token
  enum ecodes { ENOKEY = -1, EDUPKEY = -2 };

使用的编译器是 Linux 上的 GNU g++ 4.9.2。

bash-4.2$ g++ --version
g++ (GCC) 4.9.2 20150212 (Red Hat 4.9.2-6)

请帮忙。

Linux C++11 枚举 编译器错误 G++4.9

评论

2赞 Bathsheba 3/22/2017
C++11对于 C 程序?你确定?严重的 C++03、C++11 和 C 在 s 的实现上有所不同,因此您确实需要澄清。enum
2赞 Paul R 3/22/2017
使用 g++ 4.9.2 为我编译正常 - 我猜某处的标题中存在名称冲突(宏?我认为我们需要一个最小的可重复的例子......
0赞 Dr. Debasish Jana 3/23/2017
@Bathsheba,我从一个巨大的代码库中放了一个最小的例子,我遇到了这个问题。代码库主要是 C++,但也有一些 .c 文件,并给出了这个示例
0赞 Dr. Debasish Jana 3/23/2017
@PaulR同意了。但是当我将文件编译为 g++ src.c 时,它编译正常,但是当我编译为 g++ -std=c++11 src.c 时,它出现编译错误。如果这是由于名称冲突(我也这么认为),那不也是 g++ src.c 吗?
0赞 Bathsheba 3/23/2017
我认为我们需要看到表现出问题的最小代码体。上面的枚举是 C 和 C++ 中的有效语句,所以目前任何人都猜测问题是什么。

答:

0赞 Paul R 3/23/2017 #1

ENOKEY是 中定义的错误代码:<errno.h>

#define ENOKEY      126 /* Required key not available */

大概是在您的构建平台上被 d 的(至少在指定时),所以该行:<errno.h>#include<iostream>-std=c++11

enum ecodes { ENOKEY = -1, EDUPKEY = -2 };

预处理为:

enum ecodes { 126 = -1, EDUPKEY = -2 };

因此出现错误。

注意:您的原始示例代码代替了 ,因此没有其他人能够重现该问题。INVALIDENOKEY

带回家的信息:在提出问题时,请始终提供适当的 MCVE 和重现错误的实际代码,而不是您认为问题所在位置的近似值。