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