【问题标题】:Is this a circular dependency这是循环依赖吗
【发布时间】:2012-07-03 01:00:27
【问题描述】:
//A.h  
class B;  
class A{  
  void Stuff();
  B* FOO():  
  B* _b;
}  
extern A* A_A();

//A.cpp  
#include "A.h"  
#include "B.h" 
B* A::FOO(){
  return(_b);
} 

//B.h
class B{
 void BOO();
}

//B.cpp
#include "A.h"
#include "B.h" 
void B::BOO(){
 A_A->Stuff();
}

这里有 .cpp 文件中的 .h 文件的交叉包含。所以他们都互相依赖。尽管使用前向声明和指针似乎会打破循环。所以我的问题是:这是循环依赖吗?为什么?

【问题讨论】:

  • 除了 A::Stuff 未定义之外,我没有看到任何问题。你有什么问题?
  • 在工作中,我小组中的一些人称这是一种循环依赖。我不这么认为,所以我想在发言之前与某人再次确认。

标签: c++ circular-dependency


【解决方案1】:

A 依赖于B 时,根据定义,你有一个循环依赖。您可以让它与前向声明一起使用这一事实并没有改变这一事实。

【讨论】:

    【解决方案2】:

    你已经用前向声明打破了循环 include 链,但你仍然在 A 和 B 之间存在逻辑循环依赖关系。它们都需要其他类提供的东西。

    关于您的上述评论,您永远不应该为向您的团队提出问题而感到羞耻。如果发现自己错了,那么你就学到了一些东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-11
      • 1970-01-01
      • 2015-06-24
      • 2010-09-12
      相关资源
      最近更新 更多