C++中头文件设计

对于小工具程序而言,用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。

原文地址:https://blog.51cto.com/ggwhsd/2438782

时间: 2024-10-14 03:18:19

C++中头文件设计的相关文章

C程序中头文件相互包含精华(转载)

C程序中头文件相互包含精华(网摘小结) 收藏(转自:http://blog.csdn.net/lingyun3429/archive/2010/04/27/5535191.aspx).h中一般放的是同名.c文件中定义的变量.数组.函数的声明,需要让.c外部使用的声明. 1)h文件作用 1 方便开发:包含一些文件需要的共同的常量,结构,类型定义,函数,变量申明: 2 提供接口:对一个软件包来说可以提供一个给外界的接口(例如: stdio.h). 2)h文件里应该有什么 常量,结构,类型定义,函数,

C/C++ 中头文件相互包含引发的问题

今天下午遇到一个头文件相互包含而导致的编译问题,花了我不少时间去调试没找到问题,最后晚上跟师兄讨论不少时间,突然有所顿悟! 问题重现 我把问题脱离于项目简单描述一下:我写了一个函数 bool func(ClassA* CA) 需要加到项目中,我就把这个函数的声明放到 head1.h 中,函数参数类型 ClassA 定义在另一个头文件 head2.h 中,因此我需要在 head1.h 中包含 head2.h:而 head2.h 中之前又包含了 head1.h,这样就构成了一种头文件相互包含的场景.

c中头文件在cpp文件里引用和.h文件引用的思考

我们在编敲代码中头文件是常常使用的. 可是头文件是应该包括在.H文件里还是在.cpp文件里.在这个其中有什么样去差别呢. 假如说我们编写了一个a.cpp  .我们将a.cpp文件的变量和函数申明在a.h中. 在a.h文件有使用了b.中定义的类型type1数据m_type,相同b.cpp的头文件一些变量也声明在b.h中. 此时我们当然能够在a.cpp中包括b.h 也能够在a.h中.这样都是可行的.由于我们编译的时候会会将b.h包括进来. 而.h文件是不參与编译的.然后我们继续深入. 假如我们将b.

Makefile中头文件在依赖关系中作用

摘于:http://bbs.csdn.net/topics/120024677 (1)在makefile的依赖关系中用不用体现.h头文件?(2)如果在依赖关系中要体现.h头文件,应该体现到什么层次?==============================(1)在makefile的依赖关系中用不用体现.h头文件?============================== 下面是我的一些认识: 头文件中定义的是接口(函数接口,文件外全局变量和宏定义),它的作用是向调用文件封装函数的实现过程.在

c中头文件在cpp文件中引用和.h文件引用的思考

我们在编写程序中头文件是经常使用的.但是头文件是应该包含在.H文件中还是在.cpp文件中.在这个当中有什么样去区别呢.  假如说我们编写了一个a.cpp  .我们将a.cpp文件的变量和函数申明在a.h中.在a.h文件有使用了b.中定义的类型type1数据m_type,同样b.cpp的头文件一些变量也声明在b.h中.此时我们当然可以在a.cpp中包含b.h 也可以在a.h中.这样都是可行的,因为我们编译的时候会会将b.h包含进来.而.h文件是不参与编译的.然后我们继续深入.假如我们将b.h文件定

C/C++ 中头文件相互包括引发的问题

今天下午遇到一个头文件相互包括而导致的编译问题,花了我不少时间去调试没找到问题.最后晚上跟师兄讨论不少时间,突然有所顿悟! 问题重现 我把问题脱离于项目简单描写叙述一下:我写了一个函数 bool func(ClassA* CA) 须要加到项目中,我就把这个函数的声明放到 head1.h 中,函数參数类型 ClassA 定义在还有一个头文件 head2.h 中,因此我须要在 head1.h 中包括 head2.h:而 head2.h 中之前又包括了 head1.h.这样就构成了一种头文件相互包括的

C++中头文件一般包含哪些东西?

头文件和源文件 由于头文件是为了重用,所以在一个复杂的程序中,头文件可能会被间接地重复包含.如果头文件里面都是函数声明,那问题还不大.如果头文件里面有函数定义(如程序11.2),那么就会出现函数被重复定义的错误,程序将无法运行.我们可以采用函数声明和定义分离的方式:把所有的声明都放在shape.h中,把所有的定义放在shape.cpp中.注意必须在shape.cpp中包含shape.h,否则在编译连接时会发生错误.我们在使用时仍然包含shape.h,但由于函数的定义并不在该头文件中,所以就不会被

C++中头文件与源文件的作用详解

一.C++ 编译模式 通常,在一个 C++ 程序中,只包含两类文件―― .cpp 文件和 .h 文件.其中,.cpp 文件被称作 C++ 源文件,里面放的都是 C++ 的源代码:而 .h 文件则被称作 C++ 头文件,里面放的也是 C++ 的源代码. C++ 语言支持"分别编译"(separatecompilation).也就是说,一个程序所有的内容,可以分成不同的部分分别放在不同的 .cpp 文件里..cpp 文件里的东西都是相对独立的,在编译(compile)时不需要与其他文件互通

VS2015--win32工程配置的一些想法之Google Code Style中头文件的顺序

工程大了,有很多的头文件,也要引用很多的库文件. 从我们学习C++写hello world的那一刻起,就知道要包含一些系统文件. 那么顺序如何呢? 在review的时候,感觉自己写的东西就是一坨屎. 看看Google code style中是如何描述include文件顺序的: Names and Order of Includes Use standard order for readability and to avoid hidden dependencies: C library, C++