C++中头文件设计
admin
2023-02-20 15:20:07
0

对于小工具程序而言,用C++编写估计也就几个文件,此时很少设计头文件互相包含引发的编译出错问题。
但是当软件功能越来越多,功能越来越复杂,各模块之间的调用关系也越来越不明显,此时很有可能会出现A头文件包含B头文件,B头文件包含A头文件的情况,这种互相包含头文件会导致出现找不到编译类型的错误。
最简单的代码如下:
A.h如下

#include "B.h"
class A
{
    B b;
}

A.cpp如下

#include "A.h"
class A
{
     ...
}

B.h如下

#include "A.h"
class B
{
  A a;
}

B.cpp如下

#include "B.h"
class B
{
...
}

如果文件是上述这种情况,则编译出现找不到类型,因为头文件中A包含了B头文件,B中又包含了A头文件,这种循环包含会导致编译出错。

解决办法
解决办法采用前置声明。
改后代码如下
A.h如下

class B;
class A
{
    B b;
}

A.cpp如下

#include "A.h"
#include "B.h"
class A
{
     ...
}

B.h如下

class A
class B
{
  A a;
}

B.cpp如下

#include "B.h"
#include "A.h"
class B
{
...
}

如果想一劳永逸呢?
对于经常用到的模块的头文件,可以统一写一份前置声明文件,将常用的声明都写入这个头文件,比如叫做includeDeclare.h,然后将其实际的头文件都放入一个文件,比如includeHeaders.h中。这样后续其他地方使用的时候,只要在头文件中引入includeDeclare.h,在实现cpp文件中引入includeHeaders.h。

相关内容

热门资讯

【第一消息】“麻友圈2贵阳捉鸡... 有 亲,根据资深记者爆料麻友圈2贵阳捉鸡是可以开挂的,确实有挂(咨询软件...
【第一资讯】“微信窝龙.有挂吗... 【第一资讯】“微信窝龙.有挂吗?”太坑了原来有挂您好,微信窝龙这个游戏其实有挂的,确实是有挂的,需要...
【第一财经】“酉阳大贰.到底有... 【第一财经】“酉阳大贰.到底有挂吗?”必胜开挂神器您好,酉阳大贰这个游戏其实有挂的,确实是有挂的,需...
【第一消息】“夏天yy.开挂神... 有 亲,根据资深记者爆料夏天yy是可以开挂的,确实有挂(咨询软件无需打开...
重磅消息“微乐龙江麻将.到底是... 有 亲,根据资深记者爆料微乐龙江麻将是可以开挂的,确实有挂(咨询软件无需...
玩家攻略科普“欢乐斗地主.怎么... 有 亲,根据资深记者爆料欢乐斗地主是可以开挂的,确实有挂(咨询软件无需打...
今日重大发现“兴动海满麻将.开... 网上科普关于“兴动海满麻将有没有挂”话题很是火热,小编也是针对兴动海满麻将作*弊开挂的方法以及开挂对...
玩家攻略科普“情怀古诗词.到底... 有 亲,根据资深记者爆料情怀古诗词是可以开挂的,确实有挂(咨询软件无需打...
终于了解“老友十三水.到底是不... 家人们!今天小编来为大家解答老友十三水透视挂怎么安装这个问题咨询软件客服徽9752949的挂在哪里买...
【第一消息】“万圣节消除大作战... 有 亲,根据资深记者爆料万圣节消除大作战是可以开挂的,确实有挂(咨询软件...