【发布时间】:2011-03-13 01:33:37
【问题描述】:
当有嵌套的命名空间和对象声明时,我很困惑该怎么做。
我正在移植一些链接到具有一些命名空间的静态库的代码。
我所说的例子:
namespace ABC {
namespace XYZ {
//STUFF
}
}
如何在代码中声明位于命名空间XYZ 中的对象?
如果我尝试:
XYZ::ClassA myobject;
或:
ABC::XYZ::ClassA myobject;
或:
ABC::ClassA myobject;
我明白了
没有命名类型
错误,即使ClassA 确实存在。
这里有什么合适的?
【问题讨论】:
-
正确的方法是
ABC::XYZ::ClassA。如果这不起作用,则问题出在其他地方。 -
我想说 - 不要使用嵌套命名空间,让命名空间方案尽可能简单。
-
你尝试的显然是正确的。也许您在真实代码中输错了命名空间/类?您也可以检查字符大小写(这是一个常见错误)。
-
只是确保...您知道在嵌套名称空间中声明一个新类与在其中引用在外部库中声明的对象不同。
-
@Neil +1。将嵌套命名空间用于组织目的可能会导致比其价值更多的麻烦(ADL 相关以及语法负担)。我建议严格遵守它们以避免名称冲突并尽可能少地坚持。除非您在一个非常大的团队中工作,否则一个命名空间应该足以满足一个项目。
标签: c++ namespaces