好吧不确定这是正确的方式,还是正确的方式,但我已经看到了并开始使用它,假设你有6个文件
main.cpp
main.h
car.cpp
car.h
speed.cpp
speed.h
答案 0 :(得分:9)
#include
。包含的原因应该是,如果删除,代码就不会编译。
当您可以转发声明时,请不要#include
。如果是“A级”;就行了,不要#include a.h
。
特别喜欢在头文件中转发声明,避免生成高度耦合的超级包含文件的嵌套包含。
另请参阅相关问题中的Self-sufficient header files。
答案 1 :(得分:3)
1)只有当您需要将main.cpp
中的内容暴露给其他cpp
文件时,才取决于它具有的内容。
2)可能但不推荐。
3)由于多种原因(代码设计,编译时间等),您希望尽可能少地包含。此外,它的类约定为.h
和.cpp
,而其中一个直接包含另一个。您还应该尝试在.cpp
文件中包含标题,并尝试尽可能避免包含标题的标题。
答案 2 :(得分:2)
通常没有main.h
。我认为最好不要只在标题中包含源文件中所需的所有标题。如果您依赖标题来包含您需要的所有内容,则标题中的更改可能会破坏您的源文件。
答案 3 :(得分:1)
拥有“main.h”并不典型 - 但肯定没有禁止它的规则。
至于需要包含哪些内容,以及如何实现这一目标,实际上取决于各个课程的作用,以及他们对所需要的知识。
在您描述的样式中包含“包含其他所有内容的一个包含文件”通常被认为是一个坏主意。有几个原因: 1.很难看出哪个源文件取决于哪个包含。 2.编译时间越长,因为编译器必须读取一堆未使用的类定义。 你不能轻易地把“car.h”和“car.cpp”拿到另一个没有“speed.h”的项目中。
答案 4 :(得分:1)
第1页 - 你应该有一个main.h吗?
很少。 main.cpp
意味着它正在编译包含main()
的翻译单元,这通常是其他低级库的客户端代码,不需要知道main()
中的符号。如果某些事情在你的设计中变得循环,并且有充分的理由(巨大的时间压力?)不要将你要分成的东西分成单独的.cpp
,那么你最终可能得到main.h
。这应该只在main.cpp中声明其他翻译单元可能需要访问的符号。具体来说,它不应该包含car.h和/或speed.h,除非暴露需要car.h或speed.h声明的main.h函数 - 例如,main.cpp中一个带有类型参数的函数声明来自car.h或speed.h。
第二 - 如果main.h有#include car.h和#include speed.h那么在car / speed.cpp中你只需添加#main.h(因此它将包含car / speed.h)< / p>
如上所述,这几乎肯定是一个非常破碎的设计:main.cpp应该直接包含car.h和speed.h,如果它不想这样做,则需要更高级别的头文件对于car.h和speed.h,它应该根据它们的总体主题(例如transport.h)命名,而不是以想要访问它们的特定客户端命名。请记住,只有在需要从main.cpp中公开内容时才应该存在main.h。
第三 - 你应该去那条路吗?
可能不是,鉴于我上面已经解释过的。
答案 5 :(得分:0)
您应该为要在代码中使用的源文件创建头文件。因此,不太可能 - 不是不可能 - 你必须创建一个main.h头文件,因为在car.cpp和speed.cpp中你可能不包含你在main.cpp中声明的函数。相比之下,您可能在main.cpp中包含car.cpp和speed.cpp的功能,因此您希望在主文件中包含它们的标题。