如何在不冲突的情况下解决不同层次级别的同名命名空间?

时间:2011-03-31 18:45:01

标签: c++ namespaces scope

(我正在解决的问题涉及我无法改变的第三方库)

#include <list>
//Third party lib namespace
namespace foo
{
    typedef int SomeType;
}


//my namespace
namespace mycompany
{
    namespace groo
    {
        typedef std::list<foo::SomeType> SomeTypeList;
    }

    namespace foo
    {
        typedef std::list<foo::SomeType> SomeTypeList;
    }
}

int main() { return 0; }

尝试编译它会产生错误:

error: 'SomeType' is not a member of 'mycompany::foo'

来自groo的访问工作正常。如何从foo访问较浅的mycompany::foo

(我会自己回答这个问题,但我想发布问题以防其他人有同样的问题)

2 个答案:

答案 0 :(得分:5)

当编译器对范围感到困惑时,您总是可以绝对地寻址命名空间。全局范围为::,因此foo::SomeType的绝对范围名称为::foo::SomeType

我不确定为什么编译器在没有找到更深层的符号时会自动搜索较浅的命名空间... ...

答案 1 :(得分:0)

::foo::SomeType应该这样做。