说我有一些源代码MyAmoeba.cpp,带有相关的头文件MyAmoeba.h。在MyAmoeba.cpp中包含MyAmoeba.h是不错的做法? (我假设它从来没有必要,除了可能在一些设计糟糕的情况下,头文件包含一个对源文件进行更改的宏)
据我所知,执行上述操作意味着如果您更改MyAmoeba.cpp中的任何内容的签名,但忘记在MyAmoeba.h中执行此操作,则错误将在编译阶段发生,而不是在编译阶段链接阶段,但我不确定这是好/坏/不相关的事情。
我对c ++ btw相当新,如果这个问题无论如何都是荒谬的(如果是的话请指出我)
编辑: 我正在玩一个只包含函数声明的头文件,但没有类/ struct / etc定义。从其他来源和下面的答案,在我看来,当头文件只有声明时,没有必要在相关的源文件中包含头文件,但如果头文件中有任何定义,那么它确实必要的(因为您可以根据需要多次声明,但只定义一次,并且显然可以使用定义代替声明,因此源文件中的函数定义将同时计为我的声明)。
答案 0 :(得分:8)
什么?
它几乎总是必要的,因此几乎总是如此。
如果您没有声明,那么您应该如何提供定义?
您不能只拥有像
这样的代码void MyAmoeba::subdivide()
{
}
没有第一个声明 MyAmoeba
类,因此编译器可以知道名为subdivide()
的方法确实是{{1}的一部分空间。
更新 Please see this question for a discussion about the difference between declarations and definitions。