Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C+中的循环依赖关系+;标题。如何找到?_C++_Header Files_Circular Dependency - Fatal编程技术网

C++ C+中的循环依赖关系+;标题。如何找到?

C++ C+中的循环依赖关系+;标题。如何找到?,c++,header-files,circular-dependency,C++,Header Files,Circular Dependency,我想你们都知道标题中的循环依赖是什么。 其结果通常如下所示: 错误:“MyClass”未在此作用域中声明 如果程序很短,很清楚该怎么做。 但是如果程序有几十个文件 我的问题是“是否有一些算法来查找循环依赖关系?” 我指的是一些特定的步骤,这些步骤会让你成功,而不仅仅是“查看代码直到找到它” 可能是某个程序完成了这项工作?文档工具Doxygen可以生成显示依赖关系的图表。我用它来显示不同库的头文件之间的循环依赖关系 但是如果程序有几十个文件 那么它还是短的。转到编译器错误消息中提到的行,看看这里是

我想你们都知道标题中的循环依赖是什么。 其结果通常如下所示:

错误:“MyClass”未在此作用域中声明

如果程序很短,很清楚该怎么做。 但是如果程序有几十个文件

我的问题是“是否有一些算法来查找循环依赖关系?” 我指的是一些特定的步骤,这些步骤会让你成功,而不仅仅是“查看代码直到找到它”


可能是某个程序完成了这项工作?

文档工具Doxygen可以生成显示依赖关系的图表。我用它来显示不同库的头文件之间的循环依赖关系

但是如果程序有几十个文件


那么它还是短的。转到编译器错误消息中提到的行,看看这里是否有可用的类。如果*.cpp中出现问题,请包含相应的文件。如果标题中出现问题,请添加转发声明(
classmyclass;
)。如果转发声明不够,则包含声明myclass的文件。如果这导致循环依赖,则每个标头的类型太多。将标题拆分为几个较小的标题。一种方法是在整个程序的每个头上有一个类,但在许多情况下,这可能会有点过分。

我知道至少有一个编译器(Visual C++)有一个名为“显示包含”的选项,可以帮助您跟踪包含顺序。这可以帮助您找出循环发生的位置。如果您的编译器没有这样的选项,您可以在文件开头添加#pragma消息(或等效消息)来跟踪它。

相关但不是真正的重复:一般来说,很难对未编译的程序执行静态分析。但我没有发现循环依赖即使在庞大的代码库中也很难检测到。我的解决方案是永远不要在头文件中包含其他文件,而总是在implementation.cpp文件中包含所需的头文件。通常,我有一个(VS)预编译的头,用于所有常用的东西,然后是另一个头,用于我正在处理的特定项目的所有东西。