c 两个不同的枚举类型里的成员不能重名么

以其而始 2017-05-25 02:00:32
我在头文件中定义下面两个枚举,但编译时会报重定义,是active = 1和active = 2, c 我不了解,这怎么就重定义了?
要改的话应该怎么改?如何让它通过编译

typedef enum {
active = 1,
notInService = 2,
notReady = 3,
createAndGo = 4,
createAndWait = 5,
destroy = 6
}CREATEORACTIVE_E;

typedef enum {
notActive = 1,
active = 2
}ACTIVENO_E;

...全文
2897 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
LM165678 2018-01-07
  • 打赏
  • 举报
回复 1
引用 8 楼 LM165678 的回复:
楼主,枚举是一种类,可以看成是常量表的类,在外部中无法定义两个拥有同样成员的枚举类,在函数中也无法定义两个拥有相同成员的枚举类,但是可以在外部和内部定义拥有同样成员的枚举类,如下:
enum cheks{A = 0};//在全局中定义一个外部枚举类,成员有A
/*enum cheks1{A = 1};//那么无法在全局中再定义一个外部枚举类,成员也有A的枚举类*/
/*enum cheks1{A = 0};*/
void test2()
{
	enum chek {A = 0, MyName, Hellow};//但是可以在内部函数中定义一个枚举类,成员为A
	enum testEnum {A = 0, A1 = 1, MyName1, Hellow1};//如果testEnum中有一个A值,那么无法编译通过

	enum chek chek1;
	enum testEnum testEnum1;

	chek1 = A;//因为局域变量里面有一个chek的枚举值为A,所以会引用chek的A值,而不会引用外部的cheks的A值
	printf("chek1 = %d", chek1);
	
	testEnum1 = A1;
	printf("testEnum1 = %d", testEnum1);
}
楼主,请忽略我说的"类",因为我习惯用java的术语来描述,类就是一种数据结构,请这么理解
LM165678 2018-01-07
  • 打赏
  • 举报
回复 1
楼主,枚举是一种类,可以看成是常量表的类,在外部中无法定义两个拥有同样成员的枚举类,在函数中也无法定义两个拥有相同成员的枚举类,但是可以在外部和内部定义拥有同样成员的枚举类,如下:
enum cheks{A = 0};//在全局中定义一个外部枚举类,成员有A
/*enum cheks1{A = 1};//那么无法在全局中再定义一个外部枚举类,成员也有A的枚举类*/
/*enum cheks1{A = 0};*/
void test2()
{
	enum chek {A = 0, MyName, Hellow};//但是可以在内部函数中定义一个枚举类,成员为A
	enum testEnum {A = 0, A1 = 1, MyName1, Hellow1};//如果testEnum中有一个A值,那么无法编译通过

	enum chek chek1;
	enum testEnum testEnum1;

	chek1 = A;//因为局域变量里面有一个chek的枚举值为A,所以会引用chek的A值,而不会引用外部的cheks的A值
	printf("chek1 = %d", chek1);
	
	testEnum1 = A1;
	printf("testEnum1 = %d", testEnum1);
}
yi19861209 2017-05-25
  • 打赏
  • 举报
回复
paschen 2017-05-25
  • 打赏
  • 举报
回复
http://en.cppreference.com/w/cpp/language/enum Each enumerator becomes a named constant of the enumeration's type (that is, name), visible in the enclosing scope, and can be used whenever constants are required.
paschen 2017-05-25
  • 打赏
  • 举报
回复
是的,不能,除非写在两个不同的名字空间中
自信男孩 2017-05-25
  • 打赏
  • 举报
回复
枚举,你可以认为是宏,宏定义是不允许重名的,那么枚举也是一样的。
以其而始 2017-05-25
  • 打赏
  • 举报
回复
那我又多个枚举,可能里面的成员会有相同的,难道每个都设置namespace ??
幻夢之葉 2017-05-25
  • 打赏
  • 举报
回复 1
对于不同枚举值,取不同名称,例如加前缀

typedef enum {
    cact_active = 1,
}CREATEORACTIVE_E;

typedef enum {
    act_notActive = 1,
    act_active = 2
}ACTIVENO_E;
cutmelon 2017-05-25
  • 打赏
  • 举报
回复
这么写是不行的,一般用不同的namespace包起来

70,032

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧