在自己的源文件中包含头文件?

fun*_*ute 0 c++

说我有一些源代码MyAmoeba.cpp,带有相关的头文件MyAmoeba.h.在MyAmoeba.cpp中包含MyAmoeba.h是不错的做法?(我假设它从来没有必要,除了可能在一些设计糟糕的情况下,头文件包含一个宏来更改源文件)

据我所知,执行上述操作意味着如果您更改MyAmoeba.cpp中的任何内容的签名,但忘记在MyAmoeba.h中执行此操作,则错误将在编译阶段而不是在链接阶段发生,但我不确定这是好事/坏事/无关紧要的事情.

我对c ++ btw相当新,如果这个问题无论如何都是荒谬的(如果是这样的话,请指出我)

编辑:我正在玩一个只包含函数声明的头文件,但没有类/结构/等定义.从其他来源和下面的答案,在我看来,当头文件只有声明时,没有必要在相关的源文件中包含头文件,但如果头文件中有任何定义,那么它确实必要的(因为您可以根据需要多次声明,但只定义一次,并且显然可以使用定义代替声明,因此源文件中的函数定义将同时计为我的声明).

unw*_*ind 8

什么?

它几乎总是必要的,因此几乎总是如此.

如果您没有声明,那么您应该如何提供定义?

你不能只有像这样的代码

void MyAmoeba::subdivide()
{
}
Run Code Online (Sandbox Code Playgroud)

首先声明MyAmoeba类,所以编译器可以知道,一个调用的方法subdivide()确实是一部分MyAmoeba::空间.

更新 请参阅此问题,以了解声明和定义之间的区别.

  • 如果`MyAmoeba.cpp`*中的代码不需要`MyAmoeba.h`中的声明,那么它们可能不应该有这样的相似名称. (2认同)