头文件包含问题
来源:互联网 发布:淘宝客贷入口2017 编辑:程序博客网 时间:2024/03/29 09:11
一、类嵌套的疑问 C++头文件重复包含实在是一个令人头痛的问题,前一段时间在做一个简单的数据结构演示程序的时候,不只一次的遇到这种问题。假设我们有两个类A和B,分别定义在各自的有文件A.h和B.h中,但是在A中要用到B,B中也要用到A,但是这样的写法当然是错误的: class A class B 二、不同头文件中的类的嵌套 在实际编程中,不同的类一般是放在不同的相互独立的头文件中的,这样两个类在相互引用时又会有不一样的问题。重复编译是问题出现的根本原因。为了保证头文件仅被编译一次,在C++中常用的办法是使用条件编译命令。在头文件中我们常常会看到以下语句段(以VC++6.0自动生成的头文件为例): #if !defined(AFX_STACK_H__1F725F28_AF9E_4BEB_8560_67813900AE6B__INCLUDED_) 其中首句#if !defined也经常做#ifndef,作用相同。意思是如果没有定义过这个宏,那么就定义它,然后执行直到#endif的所有语句。如果下次在与要这段代码,由于已经定义了那个宏,因此重复的代码不会被再次执行。这实在是一个巧妙而高效的办法。在高版本的VC++上,还可以使用这个命令来代替以上的所有: 但是不要以为使用了这种机制就全部搞定了,比如在以下的代码中: //文件A.h中的代码 #include "B.h" class A //文件B.h中的代码 #include "A.h" class B 这里两者都使用了指针成员,因此嵌套本身不会有什么问题,在主函数前面使用#include "A.h"之后,主要编译错误如下: //文件A.h中的代码 #include "B.h" class B; class A //文件B.h中的代码 #include "A.h" class B; class B 这样至少可以说明,头文件包含代替不了前置声明。有的时候只能依靠前置声明来解决问题。我们还要思考一下,有了前置声明的时候头文件包含还是必要的吗?我们尝试去掉A.h和B.h中的#include行,发现没有出现新的错误。那么究竟什么时候需要前置声明,什么时候需要头文件包含呢? 三、两点原则 头文件包含其实是一想很烦琐的工作,不但我们看着累,编译器编译的时候也很累,再加上头文件中常常出现的宏定义。感觉各种宏定义的展开是非常耗时间的,远不如自定义函数来得速度。我仅就不同头文件、源文件间的句则结构问题提出两点原则,仅供参考:
|
- 头文件包含问题
- 头文件包含问题
- 头文件包含问题
- 头文件互相包含问题
- 头文件重复包含问题
- 头文件包含冲突问题
- C++ 头文件包含问题
- 头文件包含顺序问题
- c++ 头文件包含问题
- 头文件相互包含问题
- 头文件互相包含问题
- Qt头文件包含问题
- 头文件互包含问题
- C++ 头文件包含问题
- c++:头文件包含问题
- 关于头包含头文件的问题
- 关于头文件文件包含的问题
- 防止重复包含头文件的问题
- 推荐--jQuery使用手册
- 强烈推荐读硕士的人看看
- 我得CSDN第一篇文章就要诞生了
- 在C/C++中如何使函数返回数组
- 启动程序时如何才可以最小化到托盘区
- 头文件包含问题
- 采购计划的相关知识
- USB ORG vendor ID申请以及WHQL认证步骤
- 如何查看已部署到服务器上的Flash/Flex日志
- 设计模式之 Decorator
- JSP关于request.getParameter("");中文乱码问题
- squid重要细节
- 求助!!
- 简单的JSTL例子