如何从另一个命名空间中的全局命名空间定义友元类?

Dan*_*ich 5 c++ namespaces global friend

在之前的问答(如何在另一个 C++ 命名空间中定义全局命名空间中的友元?)中,给出了在引用全局命名空间中的函数的命名空间内定义友元函数的解决方案。

我对classes有同样的问题。

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); };
};
Run Code Online (Sandbox Code Playgroud)

如果我将 CBaseSD 放入命名空间,它就可以工作;例如,朋友类 SD::CBaseSD;但我还没有找到适用于全局命名空间的咒语。

我正在使用 g++ 4.1.2 进行编译。

小智 -1

添加如下前向声明

命名空间{  
  // 匿名命名空间声明
  CBaseSD 类;
}

那么你的正常

友元类 CBaseSD;// 不需要 ::

在 CBase 工作