我正在构建一个简单的C ++程序,它由一个main函数和两个嵌套类组成。在每个类和函数中,我使用字符串和向量 - 因此软件需要额外的库。
每个类都在单独的myClass.h
文件和相应的myClass.cpp
中定义。
我的问题涉及其他库。假设我使用#include <string>
中的main.cpp
。如何将该库传递给myClass.h
和myClass.cpp
?
答案 0 :(得分:3)
如果您的软件足够简单(例如一些翻译单元,少于一万行源代码),您最好拥有单个标头文件,例如对于您的所有项目,myproject.h
,以及#include
,无处不在。然后,对于外部库,myproject.h
标头也可以#include
外部标头(可能是标准C ++库中的<vector>
和<string>
)。
C ++中没有要求每个类有一个头文件(或一个翻译单元),我相信并不总是有充分的理由(但其他一些人的想法不同)。您可以在同一个翻译单元中放置几个相关的类,并且可以在单个头文件中包含许多声明。
但所有这些都是意见,惯例和编码风格的问题。对于一些简单的项目来说,只要你保持连贯,就没那么重要了。我的观点是在单个源(或头文件)文件中有几千行代码不是问题,我通常以这种方式编码。我非常不喜欢每个源文件有一个类(比如Java中需要的那样),因为我讨厌拥有数百个小文件(每个文件少于一百行)。顺便说一下,C ++编译器可能需要更长的时间来编译你的项目,使用这样一个每类文件的方法(因为像<map>
或<vector>
这样的C ++容器标准头文件正在拉动很多包含的代码:在我的GCC 5上,GNU Linux系统#include <vector>
扩展到超过一万行,或大约340K字节。
另请注意,源文件中的类(和声明)的组织比类层次结构的整体设计要少得多。例如,如果你从一个myproject.h
方法开始(就像我建议的那样),后来对它不满意,那么将你的类扩展到几个标题中会很容易(一小时的复制/粘贴和一些{{} 1}} - s要添加);但重新设计你的类及其继承或签名,即refactoring你的代码,要困难得多。
研究几个C ++自由软件的源代码(例如http://github.com/ ...)(例如fish-shell,POCO,cpp-netlib,jsoncpp和许多其他人)建立自己的意见。
答案 1 :(得分:1)
你没有“通过”图书馆。需要使用库的每个源文件都应该#include该库的头文件。如果它只是使用库的代码体,则将#include放在.cpp文件中。如果需要,只将它添加到.h文件中 - 例如,如果包含的库中的类被用作该.h文件中声明的函数的参数。
不应该在.h文件和相应的.cpp文件中#include同一个库。做其中一个。