在之前的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编译。
做工精细这里(VC++ 2008) – Manuel 2010-02-10 12:29:37
GCC似乎抱怨命名空间CB的右括号后,不需要分号 – Manuel 2010-02-10 12:30:45
曼努埃尔是正确的它甚至在vC++ 2003中工作的很好,所以1+。 – Ashish 2010-02-10 12:56:23