命名空间和前向声明问题

时间:2014-06-23 12:55:36

标签: c++ namespaces forward-declaration

我的前向声明和命名空间有问题。以下示例代码:

namespace Waalkes
{
   class Otto;
}

namespace Comedian
{
    class MyClass : public ...
    {
        ...
        Waalkes::Otto getFun();
        ...
    }
}

这通常不成问题," Waalkes :: Otto getFun()"是指直接向前发表申报。不幸的是,一些程序员决定也有一个命名空间"" Comedian :: Waalkes"这是在此代码中包含的一个标头中定义的。所以编译器试图找到" Comedian :: Waalkes :: Otto"哪个不存在。

因为它不是摆脱这些丑陋的双重名称的选择:我有什么选择?是否有可能以某种方式定义getFun(),以便其返回值引用正确的命名空间" Waalkes :: Otto"而不是"喜剧演员:: Waalkes :: Otto"因为封闭的"命名空间Comedian"?某种父命名空间占位符可能是吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用Waalkes专门引用全局命名空间中的::Waalkes命名空间。因此,如果您想要该命名空间中的Otto类,请执行::Waalkes::Otto

但是,你仍然会遇到问题。您不能在函数定义中将不完整类型用作返回类型。