我对前向声明和名称空间有疑问。以下示例代码:
namespace Waalkes
{
class Otto;
}
namespace Comedian
{
class MyClass : public ...
{
...
Waalkes::Otto getFun();
...
}
}
通常,这应该没问题,“ Waalkes :: Otto getFun()”直接指向顶部的前向声明。不幸的是,一些程序员决定在此代码中包含的头文件之一中定义一个命名空间“ Comedian :: Waalkes”,因此碰巧编译器试图查找不存在的“ Comedian :: Waalkes :: Otto”。
由于摆脱这些丑陋的重复使用的名字不是一种选择:我有哪些选择?是否有可能以某种方式定义getFun(),以使其返回值引用正确的命名空间“ Waalkes :: Otto”而不是“ Comedian :: Waalkes :: Otto”,因为其中包含“命名空间喜剧演员”?某种父命名空间占位符?
谢谢!
最佳答案
您可以使用Waalkes
专门引用全局命名空间中的::Waalkes
命名空间。因此,如果要在该命名空间中使用Otto
类,请执行::Waalkes::Otto
。
但是,您仍然会遇到问题。您不能在函数定义中使用不完整类型作为返回类型。
关于c++ - 命名空间和前向声明问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24366532/