头文件互相包含指的是两个或多个头文件相互包含对方,形成一个循环依赖。这会导致编译器在处理这些头文件时陷入无限递归,从而引发编译错误。具体来说,当一个头文件尝试包含另一个头文件,而另一个头文件又尝试包含第一个头文件时,编译器无法确定头文件的处理顺序,从而导致错误。 2. 在Qt中如何避免头文件互相包含的...
上两节讲的是头文件的重复包含,重复包含是:在主文件 main中 可能会包含多个自己写的头文件,这些个头文件中又变相的(间接的)包含了其他的头文件,导致某一个c.h 在纯纯的替换之后,在主文件上面出现了多次,结果造成了重复包含,从而导致重定义这种错误。 互相包含: 假如有一个c.h和d.h 两个头文件。c.h里面想...
我们知道,当一个类(设类A)中包含另一个类(设类B)的对象时,必须在该文件中包含另一个类的头文件,如果两个类都互用到了对方的对象,理论上就要互相包含头文件,但是这样是不可取的。贴出代码如下: 这样是无法通过编译的,其原因是它们的头文件互相包含了,你包含我,我又包含你,没完没了! 为了解决这个问题,只...
2、两个类中互相使用了对方的指针,这样的情况很简单,分别在各自的头文件中声明一下使用的类, 而在各自的源文件中包含对方的头文件即可。(也可以根据情况1来解决) 这样就有效解决了头文件互相包含的问题。 参考资料:http://blog.sina.com.cn/s/blog_6e04a8350100sonp.html http://blog.csdn.net/yang_lang/...
3、避免头文件互相包含和循环包含 头文件互相包含会导致递归包含,头文件互相依赖的逻辑本身就是错误的而且无法实现,头文件循环包含同理(比如a.h包含b.h,b.h包含c.h,c.h包含a.h)。正确的做法是将头文件的依赖降到最小,尽量在源文件中包含头文件,头文件中尽量用前置声明(尽量使用指针和引用,相关定义放到源文件...
这两个头文件互相包含,编译就是一大堆报错。这种写法是极其不合理的。 下面我们修改一下Work.h #pragma once //#include "State.h" //注释掉该头文件 class State; //增加该类对象的声明 class Work { public: Work(); ~Work(); void ClearCurrentState() ...
首先声明,简单的头文件重复包含问题不在此文的讨论范围之内,此问题可以通过下面的文件格式进行解决。 #ifndef __filename_h__ #define __filename_h__ /* code */ #endif 我们这里讨论的头文件互相包含是文件中的内容有互相引用的情况。比如test_a.h文件中定义了结构体TEST_A_S,test_b.h文件中定义了结构...
这是因为头文件只能包含一次,可以用宏定义来解决这个问题。在你的Line和Point两个.h文件中分别加入下面的代码://Line.h#ifndef _LINE_H#define _LINE_H// 你自己的代码#endif//---// Point.h#ifndef _POINT_H#define _POINT_H// 你自己的代码#endif 其次,如果是VC,在这两个头文件最开...
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...
C++中如何避免头文件包含问题 假设有一个名为“Head.h”的文件: 再有一个名为“TestHead.cpp”的文件: 这个时候如果编译TestHead.cpp就会出现一个编译错误,指出Circle类有多个定义。这是因为,在C++中,预处理器是把头文件的内容插入它们包含的位置。Circle.h在上面第一行中被包含。由于Circle类的头文件也包含在...