【问题标题】:How can identically named namespaces at different hierarchy levels be addressed without conflict?如何在不冲突的情况下处理不同层次结构级别的同名命名空间?
【发布时间】:2011-07-27 03:48:25
【问题描述】:

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

#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 的访问工作正常。如何从mycompany::foo 访问较浅的foo

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

【问题讨论】:

    标签: c++ namespaces scope


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      当编译器对范围感到困惑时,您总是可以绝对地寻址一个命名空间。全局作用域是:: 所以foo::SomeType 的绝对作用域名称是::foo::SomeType

      我不太确定为什么当编译器在较深的命名空间中找不到符号时,它不会自动搜索较浅的命名空间...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-19
        • 1970-01-01
        • 2017-05-03
        • 2019-02-11
        • 1970-01-01
        • 1970-01-01
        • 2010-12-05
        • 1970-01-01
        相关资源
        最近更新 更多