复杂的循环依赖

Mik*_*ite 6 c++ oop circular-dependency

什么是解决循环依赖的最佳实践C++

我可以使用前向声明,但后来我得到了pointer to incomplete class type is not allowed错误.这是否意味着使用彼此指针的两个类不能依赖?

另外,我考虑过向前声明每个类,然后包括解决方案的每个标题main.cpp,所以它都在一个地方.你会推荐吗?

整个项目的片段如下所示,如果在我熟悉的例子中更好地解释问题,你可以参考它,但它只是理论上的.谢谢

模型相互依赖

Mar*_*ork 10

您只需要正确使用前向声明:

  1. 将所有代码放在cpp文件中
  2. 在头文件中只放入类声明
  3. 在头文件中:
    1. 如果仅使用指针或引用,请使用前向声明.
    2. 否则你要包含头文件.(不要添加不需要的包括)
  4. 在cpp文件中
    1. 包括您需要的所有头文件.

注意:添加包含警戒.

没有实际的声明,很难真正做到这一点.该图很好但没有足够的信息.一张图片可能胜过千言万语,但精确定义的语言可以非常紧凑地传达更准确的信息(与英语及其不一致性不同).


Dav*_*son 7

一种想法是引入接口并删除循环依赖项.所以你会得到Effect,Player和EffectContainer所依赖的IE效果.可能,如果Player依赖于Effect和EffectContainer的某些行为取决于一组不同的行为,我会考虑引入两个接口,有效地遵循接口隔离原则.这也将遵循依赖性倒置原则.