这不会编译。

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/

10-13 00:06