何时包含不需要?

Jon*_*han 2 c++ include

我承认,当涉及到包括时,我有点天真.我的理解是,如果你在课堂上使用它,你需要包含它或者向前声明它.但后来我经历了一些代码,我看到了这个:

// file: A.cpp
#include "Helper.h"
#include "B.h"
#include "C.h"
#include "A.h"
// ...

// file: A.h
B b;
C c;
// ...

// file: B.h
Helper h;
// ...

// file: C.h
Helper h;
// ...
Run Code Online (Sandbox Code Playgroud)

有人可以向我解释为什么B和C不需要包括Helper吗?此外,组织的优点/缺点包括这种方式?(除了明显减少打字.)

谢谢.

iam*_*ind 5

当您将#include某个头文件(或其他)文件放入.cpp文件时,该#include语句将简单地替换为头文件的内容.例如:

//header.h
int i;
float f;

// file.cpp
#include"header.h"
int main()
{}
Run Code Online (Sandbox Code Playgroud)

在预处理阶段之后,file.cpp看起来像,

int i;
float f;

int main()
{}
Run Code Online (Sandbox Code Playgroud)

可以在g ++中看到这个,它只g++ -E file.cpp > TEMP显示预处理文件.

在您当前的问题上下文中,您必须具有#include helper.h之前/之前B.h和C.h之前出现的并且您声明了这些类型的对象.

此外,依靠头文件的排列来使代码工作是不好的做法,因为一旦你改变排列很少,整个层次结构就会崩溃并出现几个编译错误.

相反#include,如果您正在使用文件中的所有内容,您可以使用#ifndef警卫来避免多次包含:

//helper.h
#ifndef HELPER_H
#define HELPER_H

// content of helper file

#endif
Run Code Online (Sandbox Code Playgroud)