2014-06-23 134 views
0

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

namespace Waalkes 
{ 
    class Otto; 
} 

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

这应该是没有问题的,通常,“Waalkes ::奥托getFun()”是指在上面直接转发声明。不幸的是,有些程序员决定在这个代码中包含的头文件中定义了一个名为“Comedian :: Waalkes”的命名空间,因此编译器试图找到不存在的“Comedian :: Waalkes :: Otto”。

既然它不是一个可以摆脱这些丑陋的双重使用名称的选项:我有什么选择?是否有可能以某种方式定义getFun(),以便其返回值引用正确的名称空间“Waalkes ::奥托”,而不是‘命名空间喜剧演员’,因为封闭的‘喜剧演员:: Waalkes ::奥托?’一些家长样的命名空间占位符的可能?

谢谢!

回答

1

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

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