我承认,当涉及到包括时,我有点天真.我的理解是,如果你在课堂上使用它,你需要包含它或者向前声明它.但后来我经历了一些代码,我看到了这个:
// 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吗?此外,组织的优点/缺点包括这种方式?(除了明显减少打字.)
谢谢.
当您将#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)
| 归档时间: |
|
| 查看次数: |
323 次 |
| 最近记录: |