当有嵌套的命名空间和对象声明时,我很困惑该怎么做。
我正在移植一些链接到具有一些命名空间的静态库的代码。
我所说的例子:
namespace ABC {
namespace XYZ {
//STUFF
}
}
如何在代码中声明一个位于命名空间 XYZ
中的对象?
如果我尝试:
XYZ::ClassA myobject;
或:
ABC::XYZ::ClassA myobject;
或:
ABC::ClassA myobject;
我明白了
does not name a type
错误,即使 ClassA
确实存在。
这里有什么合适的?
最佳答案
这取决于你已经使用的命名空间:
如果您不在命名空间或另一个不相关的命名空间中,则必须指定整个路径 ABC::XYZ::ClassA
。
如果您在 ABC
中,则可以跳过 ABC
并直接编写 XYZ::ClassA
。
另外,值得一提的是,如果要引用不在命名空间(或“根”命名空间)中的函数,可以在其前面加上 ::
:
例子:
int foo() { return 1; }
namespace ABC
{
double foo() { return 2.0; }
void bar()
{
foo(); //calls the double version
::foo(); //calls the int version
}
}
关于c++ - C++ 中的嵌套命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3199139/