我的代码中有两个枚举:
enum Month {January, February, March, April, May, June, July,
August, September, October, November, December};
enum ShortMonth {Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec};
Run Code Online (Sandbox Code Playgroud)
May
是两个枚举中的常见元素,因此编译器说:
调查员的重新声明'
May
'.
为什么这么说呢?我怎么能绕过这个呢?
unw*_*ind 40
枚举名称在全球范围内,它们必须是唯一的.请记住,您不需要使用枚举名称限定枚举符号,您只需执行以下操作:
Month xmas = December;
Run Code Online (Sandbox Code Playgroud)
不:
Month xmas = Month.December; /* This is not C. */
Run Code Online (Sandbox Code Playgroud)
出于这个原因,您经常会看到人们在符号名称前加上枚举名称:
enum Month { Month_January, Month_February, /* and so on */ };
Run Code Online (Sandbox Code Playgroud)
Ale*_*own 29
我建议你合并两个:
enum Month {
Jan, January=Jan, Feb, February=Feb, Mar, March=Mar,
Apr, April=Apr, May, Jun, June=Jun,
Jul, July=Jul, Aug, August=Aug, Sep, September=Sep,
Oct, October=Oct, Nov, November=Nov, Dec, December=Dec};
Run Code Online (Sandbox Code Playgroud)
哪个效果完全相同,更方便.
如果您希望January的值为1而不是0,请添加以下内容:
enum Month {
Jan=1, January=Jan, Feb, February=Feb, ....
Run Code Online (Sandbox Code Playgroud)
Ale*_*tov 13
在C++中,为避免名称冲突,您可以将枚举包装到结构中:
struct Month { enum {January, February, March, April, May, June, July,
August, September, October, November, December}; };
struct ShortMonth { enum {Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec}; };
Run Code Online (Sandbox Code Playgroud)
小智 7
什么放松说.但我还想说你的例子似乎是一个非常不寻常的使用枚举.我看不出让ShortMonth和LongMonth都指向同一个东西的价值 - 这对字符串有意义,但对于枚举则没有意义.为什么不只有一个月枚举类型?
在 C++11 中,您可以使用作用域枚举来解决这个问题。这将从全局范围中删除名称并将它们范围限定为枚举名称。
enum class Identity
{
UNKNOWN = 1,
CHECKED = 2,
UNCHECKED =3
};
enum class Status
{
UNKNOWN = 0,
PENDING = 1,
APPROVED = 2,
UNAPPROVED =3
};
int main ()
{
Identity::UNKNOWN;
Status::UNKNOW;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
20082 次 |
最近记录: |