繁体   English   中英

命名空间和前向声明问题

[英]Namespace and forward declaration problems

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM