C++ 头文件互相包含 1. 解释什么是头文件互相包含及其可能带来的问题 头文件互相包含(也称为循环依赖或循环引用)发生在两个或多个头文件相互包含对方的情况。例如,header1.h 包含header2.h,而 header2.h 又包含 header1.h。这种互相包含可能导致以下问题: ...
上两节讲的是头文件的重复包含,重复包含是:在主文件 main中 可能会包含多个自己写的头文件,这些个头文件中又变相的(间接的)包含了其他的头文件,导致某一个c.h 在纯纯的替换之后,在主文件上面出现了多次,结果造成了重复包含,从而导致重定义这种错误。 互相包含: 假如有一个c.h和d.h 两个头文件。c.h里面想...
我们知道,当一个类(设类A)中包含另一个类(设类B)的对象时,必须在该文件中包含另一个类的头文件,如果两个类都互用到了对方的对象,理论上就要互相包含头文件,但是这样是不可取的。贴出代码如下: 这样是无法通过编译的,其原因是它们的头文件互相包含了,你包含我,我又包含你,没完没了! 为了解决这个问题,只...
在b.h文件里面只是简单的先引入了类A的声明,而没有引入实体,这样就能解决头文件相互包含的问题,虽然这种问题很少见,某些问题的确有头文件相互包含的需求,所以这个问题一定要处理好。
回调函数——一个化解C++互相包含头文件问题的方法,最近写了两个通讯协议程序,都是电力系统中问答式传输规约,一个是基于TCP传输文件的102规约服务端程序,一个是基于串口采集数据的102规约客户端程序。之前还有别的通讯规约,最近更浓烈的期望能够抽象出这些通讯协议程序
C++头文件重复互相包含,假设有两个类A和B,分别定义在各自的有文件A.h和B.h中,但是在A中要用到B,B中也要用到A,代码如下://文件A.h中的代码 #pragma once #include "B.h" class B; class A { public: B* b; }; //文件B.h中的代码 #pragma once #include "A...
我们这里讨论的头文件互相包含是文件中的内容有互相引用的情况。比如test_a.h文件中定义了结构体TEST_A_S,test_b.h文件中定义了结构体TEST_B_S,且TEST_A_S引用了TEST_B_S,同时TEST_B_S也引用了TEST_A_S。 此问题的本质就是结构体的互相引用,下面我们对结构体互相引用的问题进行分析,而对于头文件互相包含...
这是因为头文件只能包含一次,可以用宏定义来解决这个问题。在你的Line和Point两个.h文件中分别加入下面的代码://Line.h#ifndef _LINE_H#define _LINE_H// 你自己的代码#endif//---// Point.h#ifndef _POINT_H#define _POINT_H// 你自己的代码#endif 其次,如果是VC,在这两个头文件最开...
我们这里讨论的头文件互相包含是文件中的内容有互相引用的情况。比如test_a.h文件中定义了结构体TEST_A_S,test_b.h文件中定义了结构体TEST_B_S,且TEST_A_S引用了TEST_B_S,同时TEST_B_S也引用了TEST_A_S。 此问题的本质就是结构体的互相引用,下面我们对结构体互相引用的问题进行分析,而对于头文件互相包含...
今日重构完LINUX安装,然后就重构升级代码。吾一看一个头文件,当时就震惊了: 竟然有函数名叫start()。大哥你英文词汇少吾不奇怪,咱能不能加个单词?比如function?work? linux/windows的头文件互相包含。吾当时就……佩服程序员的脑路清奇。既然咱互相包含,说明咱有共性,把共性提出来是不是更好看?你的程序难道在一...