如何解决递归朋友类
| 有没有办法解决: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 举报,一经查实,本站将立刻删除。