如果我创建这样一个标题:自定义头文件和库包括[C++]
#ifndef _MY_HEADER_H
#define _MY_HEADER_H
#include <iostream>
void foo();
#endif
有了它的记者.cpp文件,我需要包括的iostream在的main.cpp文件?
如果我创建这样一个标题:自定义头文件和库包括[C++]
#ifndef _MY_HEADER_H
#define _MY_HEADER_H
#include <iostream>
void foo();
#endif
有了它的记者.cpp文件,我需要包括的iostream在的main.cpp文件?
回答你的问题:不,你不需要再包括它(再次)。
但是最好的做法是在标题中仅包含标题工作所需的内容。所以如果你的foo()
方法需要iostream
,你应该包括它。如果您创建的类只使用指针或对其他类的引用,那么您应该优先使用包含各个类的完整头的前向声明。
没有必要再将它包含在main.cpp中,如main.cpp版本中所示,如果包含.h版本相同,包含将自动在编译中可用,为什么还要编写额外的冗余行?
我认为将标题只包含在你真正需要它们的地方是很好的风格,而不要依赖其他包含文件来为你包含标题。因此:是的,我也会在main.cpp中加入'iostream'。当你处于这种状态时:检查是否足够在你的'.cpp'文件中包含'iostream',而不是在头文件中。 – arne
@arne这只是一个例子,我正在考虑在标题中放入“SDL.h”,“SDL_image.h”和“SDL_mixer.h”,并使用它们与我的自定义函数一起使用。我需要将它们放在我的主文件中吗? –
我会争辩说,在@arne描述的情况下,没有必要在头文件中再次包含.cpp文件。否则,我同意1),如果它们依赖它们进行编译,则只应将头文件包含在其他头文件中,并且前向声明不会有帮助; 2)不应该依赖于其他头文件包含的内容(它们可能会更改它们包括并保留你的代码被破坏)。 –