2013-07-29 46 views
1

如果我创建这样一个标题:自定义头文件和库包括[C++]

#ifndef _MY_HEADER_H 
#define _MY_HEADER_H 

#include <iostream> 
void foo(); 

#endif 

有了它的记者.cpp文件,我需要包括的iostream的main.cpp文件?

+2

我认为将标题只包含在你真正需要它们的地方是很好的风格,而不要依赖其他包含文件来为你包含标题。因此:是的,我也会在main.cpp中加入'iostream'。当你处于这种状态时:检查是否足够在你的'.cpp'文件中包含'iostream',而不是在头文件中。 – arne

+0

@arne这只是一个例子,我正在考虑在标题中放入“SDL.h”,“SDL_image.h”和“SDL_mixer.h”,并使用它们与我的自定义函数一起使用。我需要将它们放在我的主文件中吗? –

+0

我会争辩说,在@arne描述的情况下,没有必要在头文件中再次包含.cpp文件。否则,我同意1),如果它们依赖它们进行编译,则只应将头文件包含在其他头文件中,并且前向声明不会有帮助; 2)不应该依赖于其他头文件包含的内容(它们可能会更改它们包括并保留你的代码被破坏)。 –

回答

0

回答你的问题:不,你不需要再包括它(再次)。

但是最好的做法是在标题中仅包含标题工作所需的内容。所以如果你的foo()方法需要iostream,你应该包括它。如果您创建的类只使用指针或对其他类的引用,那么您应该优先使用包含各个类的完整头的前向声明。

0

没有必要再将它包含在main.cpp中,如main.cpp版本中所示,如果包含.h版本相同,包含将自动在编译中可用,为什么还要编写额外的冗余行?