假设我在命名空间“abc”中有一个名为'foo'的类......
namespace abc {
class foo {
int a;
int b;
};
}
...然后说我在另一个命名空间中有另一个名为“abc”的类
#include "foo.h"
namespace foo {
class abc {
abc::a = 10;
};
}
abc :: a不是定义的类型,因为它将搜索类abc,而不是命名空间abc。我如何正确引用另一个名称空间中的对象,其中另一个名称空间与我所在的类名称相同?
答案 0 :(得分:23)
您可以使用::abc::xx
,即将变量或类型标识为其绝对命名空间路径。如果未指定绝对名称,则相对名称将在包含名称空间/类中开始向上。
答案 1 :(得分:6)
您可以使用前缀::
来表示从全局命名空间开始,因此在您的情况下,::abc
将表示您的第一个代码段中的abc
命名空间。
答案 2 :(得分:5)
您可以从定义全局命名空间的::
开始指定一个完全限定的名称,例如:
namespace abc {
class foo {
int a;
int b;
};
}
namespace foo {
class abc {
::abc::foo a; // Changed from 'abc::a = 10;' since it doesn't compile
};
}