我刚刚完成了一个程序,我有一个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文件中)?如果这是坏的话,我无法理解 - 我认为这个想法应该是分开的吗?
答案 0 :(得分:2)
这是完全正常的,的东西的方式是在C / C ++中完成的。头文件包含使用库所需的所有声明,源文件包含构建库所需的定义。此源文件包含头文件class
,函数,等需要先声明才能定义。
答案 1 :(得分:1)
在C ++中,在包含实现的源文件中包含包含类声明的头文件是完全可以接受的。如果你认为这是正常的,因为实现(cpp文件)将没有其他方法如何知道类中的字段(变量)。
答案 2 :(得分:1)
如果您在2个不同的(头文件和源文件)文件中实现您的类(通常是这种情况),那么是的,您绝对必须在源文件中包含头文件。如果你的课程很轻,那么你可以在头文件中实现你的功能。这是不好的做法,并不是真的推荐,所以我也不建议这样做。特别是在静态库的情况下,您应该将头文件发布到其他模块以便使用它。您不希望库使用者看到任何源代码。