c++ - 引用封闭命名空间

标签 c++ namespaces

这不会编译。

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/

相关文章:

python - 在 SWIG > 2.0.1 中相同的枚举项包装在不同类型的常量中

C++ XOR 交换浮点值

.net - .Net 4.0 中命名空间声明的错误或新约定

r - 管道中命名空间调用的函数的运算符优先级

c++ - 使用宏替换 "using namespace ...;"

c++ - Windows 上的 Objective C

c++ - 有没有一种简单的方法可以在初始化后填充二维数组?

c++ - Qt designer如何抓取信息

php - Products 和 Product 命名空间破坏了我的 xpath

macos - OS X 10.5 SDK 已弃用 getAttributeNS;我应该使用什么?