(我正在解决的问题涉及我无法改变的第三方库)
#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
?
(我会自己回答这个问题,但我想发布问题以防其他人有同样的问题)
答案 0 :(得分:5)
当编译器对范围感到困惑时,您总是可以绝对地寻址命名空间。全局范围为::
,因此foo::SomeType
的绝对范围名称为::foo::SomeType
我不确定为什么编译器在没有找到更深层的符号时会自动搜索较浅的命名空间... ...
答案 1 :(得分:0)
::foo::SomeType
应该这样做。