这不会编译。
namespace n1
{
enum e1_tag
{
FOO1 = 0,
} e1;
namespace n2
{
enum e2_tag
{
BAR1 = 3 + n1::e1::FOO1 // Why doesn't this compile?
} e2;
}
}
g ++抱怨n1 :: e1不是类或命名空间。消除n1会产生相同的错误,就像消除e1一样。
我错过了什么?
答案 0 :(得分:2)
e1
不是类或命名空间。它是e1_tag
类型的变量。
枚举器的作用域位于周围的命名空间中,因此您需要n1::FOO1
。请注意,枚举器包含字母O
,而不是数字0
。
从C ++ 11开始,您可以使用作用域枚举
enum class e1 {
FOO1 = 0,
};
创建包含其枚举数的范围。现在n1::e1::FOO1
是正确的限定名称。
答案 1 :(得分:0)
枚举类型进入封闭命名空间的范围。枚举不会引入新的范围。另外e1
是枚举的实例,而不是类型。