我对前向声明和名称空间有疑问。以下示例代码:

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/

10-09 22:46