为什么同一个头文件必须包含两次?

Why does the same header file have to be included twice?

本文关键字:包含两 同一个 文件 为什么      更新时间:2023-10-16

我刚刚完成了一个程序,其中我有一个main.cpp文件和我自己的静态库,让我们称之为myLib,它由myLib.h和myLib.cpp文件组成。

myLib.h和myLib.cpp是一个静态库。

在我的静态库中,我使用了一些boost函数和类,以便我自己的类和函数在myLib.cpp中可以做一些事情:所以在myLib.cpp中,我添加了以下行

#include <boost/math/distributions/binomial.hpp>
#include <boost/math/tools/roots.hpp>
对myLib.cpp

现在myLib.h包含函数声明和一些类定义,myLib.cpp已经实现了这些函数和类定义,并且由于一些函数需要在myLib.h中声明的类,因此#include "myLib.h"也必须添加到myLib.cpp文件中(我怀疑如果这些函数没有,那么myLib.cpp可以被编译为一个目标文件,而不需要包含myLib.h文件,只要使用目标文件的任何东西都包含myLib.h -但由于某些函数使用类,myLib.cpp也包含myLib.h)。实现文件是否可以要求头文件作为目标文件进行编译(然后包含到。a文件中)?我不太明白这是不好还是不好——我以为他们应该是分开的?

这是完全正常的,在C/c++中处理的方式。头文件包含使用库所需的所有声明,源文件包含构建库所需的定义。这个源文件包括头文件作为class s,函数,需要在定义之前声明。

在c++中,将包含类声明的头文件包含在包含实现的源文件中是完全可以接受的。如果您认为更多,这是正常的,因为实现(cpp文件)将没有其他方法如何了解类中的字段(变量)。

如果你在2个不同的(头文件和源文件)文件中实现你的类(通常是这种情况),那么是的,你绝对必须在源文件中包含头文件。如果你的类真的很轻,那么你可以在头文件中实现你的函数。这是一种不好的做法,不建议这么做,所以我也不建议这么做。特别是在静态库的情况下,您应该将头文件提供给其他模块以使用它。您不希望库使用者看到任何源代码。