小编unk*_*rog的帖子

命名空间在c ++中搜索

我发现有关命名空间搜索的问题.以下简化代码无法编译:

namespace A {
  namespace B { 
    class Test {
    };
  }
  namespace C {
    namespace B {
      typedef B::Test AnAlias;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

编译器抱怨名称空间A::C::B中的Test 没有命名类型.

问题似乎是编译器在命名空间C中看到了命名空间B,并且没有进一步搜索.我本来希望他也会查看命名空间A(这是一个封闭的命名空间)并在那里找到B :: Test.

如果我重命名C::B一切都很好.
如果我有资格,A::B::Test一切都很好.
如果我将typedef直接放在命名空间中,A::C一切都很好.

使用gcc 4.1和intel 12编译器测试了此行为.(均为linux).

编译器是对的吗?

c++ namespaces

4
推荐指数
1
解决办法
202
查看次数

标签 统计

c++ ×1

namespaces ×1