微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

递归朋友类

如何解决递归朋友类

| 有没有办法解决
class B;

class C { 
 public:
  C() { }
 private:
  int i;
  friend B::B();
};

class B { 
 public:
  B() { }
 private:
  int i;
  friend C::C();
};
给出错误
prog.cpp:8: error: invalid use of incomplete type ‘struct B’
prog.cpp:1: error: forward declaration of ‘struct B’
    

解决方法

        你就是做不到。删除循环依赖项。     ,        根据IBM的文档(我意识到这不是规范性的):   必须先定义类Y,然后才能将Y的任何成员声明为另一个类的朋友。 因此,我认为答案是“否”。 当然可以
friend class B;
...而不是
friend B::B()
,但可以使B \的所有成员之间保持友谊。您可能已经知道了。     ,        由于您对友谊非常有选择性(可以访问特定类的特定成员功能),因此可能需要律师-客户惯用语。不过,我不确定这对构造函数的效果如何。     ,        我意识到这确实是一个愚蠢的想法,但是,从理论上讲,您不能通过使父类的构造函数成为朋友来通过继承来实现这一点吗?该代码至少可以编译,但可能会产生问题。
class A {
 public:
  A() { }
 private:
  int i;
};

class D {
 public:
  D() { }
 private:
  int i;
};

class B : public A {
 public:
  B() { }
 private:
  friend D::D();
};

class C : public D {
 public:
  C() { }
 private:
  friend A::A();
};
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。