为什么同一个头文件必须包含两次?
Why does the same header file have to be included twice?
我刚刚完成了一个程序,其中我有一个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个不同的(头文件和源文件)文件中实现你的类(通常是这种情况),那么是的,你绝对必须在源文件中包含头文件。如果你的类真的很轻,那么你可以在头文件中实现你的函数。这是一种不好的做法,不建议这么做,所以我也不建议这么做。特别是在静态库的情况下,您应该将头文件提供给其他模块以使用它。您不希望库使用者看到任何源代码。
- 如何在for循环中包含两个索引值的测试条件
- 我可以创建一个包含两个变量的 for 循环,但时间复杂度仍然为 O(n) 吗?
- C++ 如何在包含两个变量的结构中存储与变量不同数量的值?
- 我需要在不使用前向声明的情况下相互包含两个头文件,导致"incomplete type"错误
- 如何使用预处理器指令包含两次具有不同代码的文件?
- 包含两个C++文件的制作文件:如何选择要编译的文件
- 如何实现 std::map::查找包含两个结构'Pos'结构的比较逻辑,每个结构包含 x 和 y 坐标
- 是一个包含两个INT(只有两个INT)的结构,保证是大小(INT)的两倍
- C 程序要读取包含两个双重值的Excel数据的单列,这些值由逗号分隔并存储在自己的数组中
- 如何有条件地为 Eclipse 中的交叉编译项目包含两个不同名称的相同版本的库
- 尽管 #ifndef,但包含两次头文件
- 解析出包含两个撇号的字符串
- one.cpp和two.cpp都包含两个.h
- 确定两个向量是否包含两个相同的相邻项
- 如何在C++中拆分字符串,其中包含两个由":"分隔的整数?
- C++:创建一个包含两个可执行文件的makefile?C++
- 当添加一条边时,使提升图仅包含两个顶点
- 创建包含两种不同数据类型或类的向量
- c++中包含两个不同类的对象的列表
- 对的向量和包含两个元素的结构体的向量的内存布局的区别- c++ /STL