C++ 中共享相同名称的类和命名空间
假设我在命名空间“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。我将如何正确引用另一个名称空间中的对象,其中其他名称空间与我所在的类具有相同的名称?
Let's say I have a class called 'foo' in namespace "abc"...
namespace abc {
class foo {
int a;
int b;
};
}
...and then say I have another class called "abc" in a different namespace
#include "foo.h"
namespace foo {
class abc {
abc::a = 10;
};
}
abc::a would not be a defined type, because it would be searching class abc, not namespace abc. How would I go about properlly referencing an object in another namespace, wherein that other namespace had the same name as the class I'm in?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
可以使用
::abc::xx
,即将变量或类型标识为其绝对命名空间路径。如果您不指定绝对名称,则相对名称开始在包含名称空间/类中向上移动。You can use
::abc::xx
, that is, identify the variable or type as its absolute namespace path. If you don't specify an absolute name, relative names start going upwards in the including namespaces/classes.您可以使用前缀
::
来表示从全局命名空间开始,因此在您的情况下::abc
将表示您的abc
命名空间第一个代码片段。You can use a prefix
::
to denote starting from the global namespace, so in your case::abc
would denote theabc
namespace from your first code snippet.您可以指定从
::
开始的完全限定名称,它定义了全局命名空间,例如:You can specify a fully qualified name starting from
::
which defines the global namespace, e.g.: