引用封闭命名空间
Referencing enclosing namespace
这不会编译。
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
是正确的限定名称。
枚举的类型进入封闭命名空间的范围。枚举不会引入新的作用域。此外,e1
是枚举的实例,而不是类型。
相关文章:
- 不同C++文件中未命名命名空间中的名称可以引用同一个命名事物吗?
- 命名空间中未引用的函数
- 有没有办法在不使用命名空间 std 或前缀 std:: 的情况下引用 cout?
- 使用多个命名空间对 vtable 的未定义引用
- 在 c++ 中在运行时声明对命名空间的引用
- 如何在命名空间中引用用户定义的文本运算符
- 即使在使用命名空间指令后也没有明确的引用错误
- 使用 "::member" 引用全局命名空间有什么用吗?
- 对"vtable for "命名空间继承的未定义引用 对"类型信息"的未定义引用
- 命名空间中的内联函数提供对C++的未定义引用
- cpp:关于未定义引用"(匿名命名空间)::CPassant::NbCPassant"的说明
- 3 文件项目中未定义引用中的 C++ 命名空间
- 引用封闭命名空间
- 您可以使用没有 :: 的命名空间引用其他类中的函数吗?
- 从另一个类引用命名空间
- 如何为匿名命名空间中未引用的本地函数生成警告
- 对 C++ 中命名空间的未定义引用
- 引用命名空间中的结构类型
- (C++)不能引用命名空间内的枚举类
- 命名空间和未定义的引用