在之前的问答(如何在另一个 C++ 命名空间中定义全局命名空间中的朋友?)中,给出了在引用全局命名空间中的函数的命名空间中定义朋友函数的解决方案。
我对课程有同样的问题。
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 进行编译。