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
添加到所有文件中。
最近我一直在为我的大学构建许多 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
添加到所有文件中。