C++头文件重复包含问题解决方法

在某些应用场合,会发生两个头文件之间相互引用,编译时候就报错了。举个出现这种问题场景的栗子,比如写了一些进程类,每种进程类有一对头文件和源文件。这些进程类由需要一个进程管理类进行管理,这个管理类的头文件就会包含所有进程类的头文件(因为一般在头文件就需要使用这些进程类了,定义成类对象)。但是进程管理类里面有一个进程切换的接口,这个接口在进程切换时都要用到,这时候进程类就需要包含进程管理类的头文件了。如果两边都包含对方的头文件,编译就报错了。

设计c++的大牛肯定考虑到这种情况的,这时候我们需要思考下编译原理,大概思考方向为:相互包含导致头文件无限包含,所以当编译器检测到相互包含就马上报错,不会让你无限相互包含,要是允许,就玩坏电脑了。所以解决方法就是,要能使用但是又不能相互包含,这时候就可以把包含头文件的代码放到需要对方源文件里面去。比如上面这个例子,就是把管理类的头文件包含代码放到进程类的源文件,这样子进程类就可以光明正大的使用管理类的接口了。哈哈。。如果想要在进程类的头文件也是用管理类的东西,比如定义类对象,也是有办法的。就是在前面加上  class 类名;   这句代码就行了,其实就是提前引用声明。只是声明定义没有使用接口,不需要告诉编译器大小和具体实现的。因为只是个类声明,所以在进程头文件不能使用管理类的接口,还是乖乖的把进程类接口实现都写在其源文件里面吧。

你可能感兴趣的:(C++)