2010-02-10 77 views
3

在之前的Q & A(How do I define friends in global namespace within another C++ namespace?)中,给出了解决方案,用于在引用全局名称空间中的函数的命名空间内使朋友函数定义。如何从另一个名称空间中的全局名称空间定义一个朋友类?

我对有同样的问题。

class CBaseSD; 

namespace cb { 
class CBase 
{ 
    friend class ::CBaseSD; // <-- this does not work!? 
private: 
    int m_type; 
public: 
    CBase(int t) : m_type(t) {}; 
}; 
}; // namespace cb 

class CBaseSD 
{ 
private: 
    cb::CBase* m_base; 
public: 
    CBaseSD(cb::CBase* base) : m_base(base) {}; 
    int* getTypePtr() 
    { return &(m_base->m_type); }; 
}; 

如果我把CBaseSD到一个命名空间,它的工作原理;例如 朋友类SD :: CBaseSD; 但我还没有找到一个适用于全局命名空间的咒语。

我正在用g ++ 4.1.2编译。

+2

做工精细这里(VC++ 2008) – Manuel 2010-02-10 12:29:37

+0

GCC似乎抱怨命名空间CB的右括号后,不需要分号 – Manuel 2010-02-10 12:30:45

+0

曼努埃尔是正确的它甚至在vC++ 2003中工作的很好,所以1+。 – Ashish 2010-02-10 12:56:23

回答

-2

添加向前声明类似下面

 
namespace { 
    // anonymous namespace declaration 
    class CBaseSD; 
} 

then your normal 

friend class CBaseSD;// no need of :: 

作品CBase的

+0

forward声明默认在文件范围内。我们可以在全球范围声明:-) – 2012-11-05 08:27:04

+0

不要混淆匿名和全局命名空间 – 2015-09-02 09:43:27

相关问题