在C++;,为什么循环目录依赖性不好? 我问这个问题是关于Linux上开发的C++项目。考虑这一点:

在C++;,为什么循环目录依赖性不好? 我问这个问题是关于Linux上开发的C++项目。考虑这一点:,c++,directory-structure,C++,Directory Structure,我有两个对等目录,dir1和dir2dir1包含classA.h和classB.hdir2包含classC.h和classD.hdir1/classA.h有一个#include用于dir2/classC.hdir2/classD.h有一个#include用于dir1/classB.h。因此,目录dir1和dir2之间存在周期性依赖关系。但是,任何类之间都没有循环依赖关系 我理解为什么类之间的循环依赖是不好的。在我看来,目录也不应该有周期性的依赖关系,这似乎是很直观的——但是我不明白为什么这会很糟

我有两个对等目录,
dir1
dir2
dir1
包含
classA.h
classB.h
dir2
包含
classC.h
classD.h
dir1/classA.h
有一个
#include
用于
dir2/classC.h
dir2/classD.h
有一个
#include
用于
dir1/classB.h
。因此,目录
dir1
dir2
之间存在周期性依赖关系。但是,任何类之间都没有循环依赖关系

我理解为什么类之间的循环依赖是不好的。在我看来,目录也不应该有周期性的依赖关系,这似乎是很直观的——但是我不明白为什么这会很糟糕


有人有解释吗?

他们还不错。至少不是你陈述问题的方式。目录是用来组织文件的,但在编程上没有任何意义

但是如果您的目录代表单独的模块(即每个目录都有一个生成的库文件),则会出现链接错误


因为
classA
依赖于
classC
,所以需要构建第二个模块来编译第一个模块。但是第二个模块需要首先构建第一个模块,因为
classD
依赖于
classB

与类类似,目录的循环依赖性可能是可维护性和重用的问题

可维护性:当一个“模块”(本例中为目录)依赖于另一个模块时,只要其他模块发生变化,该变化就会影响该模块。
重用:重用模块时,还必须重用它所依赖的模块


因此,对于循环依赖,所有模块都会受到影响。对于数量有限的模块来说,这不是一个真正的问题,但它会随着数量的增长而增长。

是否存在任何间接循环,像
classC.h
包括
classD.h
之类的?在.h文件中没有间接循环。这对我讨论文件和库是有意义的——但我不是在目录中得到它。您是否可以展开一点或提供一个示例,说明当循环仅在目录级别时,这会导致问题?谢谢。将文件放入目录是一种组织方式,因此将完整的目录作为一种模块进行重用应该是有意义的。循环依赖将重用的机会降至最低。对于可维护性,如果依赖项不是循环的,我们可以预测哪些目录会受到影响,对于(许多)循环依赖项,每次更改都会影响整个系统。