首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >枚举类型声明如预期}在数值常量之前出现C++11编译错误

枚举类型声明如预期}在数值常量之前出现C++11编译错误
EN

Stack Overflow用户
提问于 2017-03-22 21:47:28
回答 1查看 346关注 0票数 1

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

代码语言:javascript
运行
复制
#include <iostream>
enum ecodes { ENOKEY = -1, EDUPKEY = -2 };
int main()
{
  return 0;
}

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

代码语言:javascript
运行
复制
g++  test.c -o test

使用-std=c++11编译时,会出现编译错误: g++ -std=c++11 test.c -o测试

代码语言:javascript
运行
复制
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。

代码语言:javascript
运行
复制
bash-4.2$ g++ --version
g++ (GCC) 4.9.2 20150212 (Red Hat 4.9.2-6)

请帮帮忙。

EN

回答 1

Stack Overflow用户

发布于 2017-03-23 22:13:04

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

代码语言:javascript
运行
复制
#define ENOKEY      126 /* Required key not available */

在您的构建平台上(至少在指定了-std=c++11时),<iostream>可能正在对<errno.h>执行#included操作,所以下面这行代码:

代码语言:javascript
运行
复制
enum ecodes { ENOKEY = -1, EDUPKEY = -2 };

得到预处理,以:

代码语言:javascript
运行
复制
enum ecodes { 126 = -1, EDUPKEY = -2 };

因此出现了错误。

注意:您最初的示例代码用INVALID代替了ENOKEY,因此没有其他人能够重现这个问题。

带回家的信息:在提出问题时,始终提供一个适当的MCVE,其中包含重现错误的实际代码,而不是您认为问题所在的近似值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42953520

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档