【问题标题】:Solving cyclical dependency for friend classes解决友元类的循环依赖
【发布时间】:2013-04-23 08:19:08
【问题描述】:

在最基本的层面上,我需要一个类的方法来访问另一个类的私有数据,例如:

foo.h:

class foo{
    void method( void );
}

bar.h:

class bar{
   friend void foo::method( void );
}

但是,方法需要知道要访问哪个对象,使它看起来更像这样:

foo.h:

class foo{
    void method(bar* point);
}

bar.h:

class bar{
    friend void foo::method(bar* point);
}

但是,正如您所看到的,这会产生循环依赖:bar 需要 foo.h 来声明朋友,而 foo 需要 bar.h,因为它使用 bar 指针。该方法如何知道要访问哪个对象?

【问题讨论】:

  • 你可以转发声明类在另一个之上。
  • @0x499602D2 为什么不发布答案?

标签: c++


【解决方案1】:

如果您发现自己处于循环依赖中,最好检查一次您的设计。一旦你审查了设计并且如果你仍然觉得需要循环依赖,你需要使用类的前向声明

class bar;
class foo
{
    void method(bar* point);
}

好读:
When can I use a forward declaration?

【讨论】:

  • 我已经这样做了——它们存储在单独的头文件中,这似乎是问题所在——没有另一个,第一个将无法编译,依此类推,第四个
  • 真的,没有什么要补充的吗?我需要一个答案才能让它工作!
  • @Joe 您是否尝试将每个类的前向声明添加到两个文件中?
  • @0x499602D2,是的,我有。无济于事。第一个无法编译,因为它无法包含第二个,因为它无法编译,因为第一个无法包含,因为它尚未编译...
猜你喜欢
  • 2015-08-12
  • 2020-11-12
  • 1970-01-01
  • 2018-08-24
  • 1970-01-01
相关资源
最近更新 更多