为什么必须将相同的头文件包含两次?

时间:2014-06-24 17:13:34

标签: c++ compilation

我刚刚完成了一个程序,我有一个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&#34 ; myLib.h&#34;还必须添加到myLib.cpp文件中(我怀疑如果那些函数没有,那么myLib.cpp可以编译为目标文件,而不需要包含myLib.h文件,只要使用目标文件的任何内容都可以包括myLib.h - 但由于某些函数使用这些类,myLib.cpp也包含myLib.h)。实现文件是否可以将头文件作为目标文件进行编译(然后包含在.a文件中)?如果这是坏的话,我无法理解 - 我认为这个想法应该是分开的吗?

3 个答案:

答案 0 :(得分:2)

这是完全正常的,的东西的方式是在C / C ++中完成的。头文件包含使用库所需的所有声明,源文件包含构建库所需的定义。此源文件包含头文件class,函数,需要先声明才能定义。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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