繁体   English   中英

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

[英]How do I define a friend class from the global namespace in another namespace?

在先前的问答中( 如何在另一个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进行编译。

如该问题下方的某些评论所述,该问题中的代码似乎可以与我一起使用(Linux-Ubuntu-16.04,gcc版本5.4.0),前提是该朋友类已被预先声明

在寻求答案的过程中,我碰到了这篇文章 ,它们都解释了使全局命名空间成为好友类的正确方法,并回答了为什么需要以这种方式声明它。 这是一个不错的线程,因为它引用了标准。

如前所述,必须先声明全局名称空间的类,然后才能将其用作名称空间中的类的好友类。

如下添加前向声明

namespace {  
  // anonymous namespace declaration
  class CBaseSD;
}

then your normal

friend class CBaseSD;// no need of ::

在CBase中工作

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM