C++。在多文件项目中避免 cross-linking

C++. Avoiding cross-linking in multple files project

最近我一直在为我的大学构建许多 C++ 项目。它们由多个文件和一个 Makefile 组成。全部在prj文件夹中,里面有Makefile,源文件在src文件夹和inc文件夹中的headers。 Makefile 将其编译为 obj 文件夹中的 object 个文件,然后将其链接到最终程序。

我确实遇到了很多奇怪的错误,我将其分解为这些错误,例如我在 Vector.h 文件和 Vector.h[=51 中包含了 Matrices.h =] 在 Matrix.h 中。编译器说 Matrix class.

中不存在某些方法

我必须在 Matrix.h 中包含 Vector.h。然后,在main.cpp中包含Matrix。我在所有文件中使用 sqrt()pow() 函数。

现在我想知道是否应该避免在 Vector.h 中连续声明 <cmath> 库,然后 Matrix.h 最后在 main.cpp?我宁愿在 Vector.h 中声明它并保留它。编译器是 g++ 及其 Linux Debian。

我使用预处理器指令:

#ifndef VECTOR_HH //or MATRIX_HH etc.
#define VECTOR_HH

#include <cmath>

//class body


#endif`

要独立于包含文件中的#include 更改,您应该包含所用的内容。

好的做法是定义一个通用头文件,您可以在其中包含所有必需的头文件以及头文件保护。

考虑例如common-hdr.h,其中您声明

#ifndef COMMON-HDR_HH
#include <cmath>
#include "Vector.h"
#include "Matrix.h"

// other common files

#endif

现在您可以自由地将 common-hdr.h 添加到所有文件中。