这不会编译。
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不是类或 namespace 。与消除e1一样,消除n1会产生相同的错误。
我想念什么?
最佳答案
e1
不是类或 namespace 。这是一个类型为e1_tag
的变量。
枚举器的作用域是周围的命名空间,因此您需要n1::FOO1
。请注意,该枚举器包含字母O
而不是数字0
。
从C++ 11开始,您可以使用范围枚举
enum class e1 {
FOO1 = 0,
};
创建一个包含其枚举数的范围。现在
n1::e1::FOO1
是正确的限定名称。关于c++ - 引用封闭的 namespace ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28436988/