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