目录
1. 原因分析
循环依赖问题:
当a.h包含b.h,而b.h又包含a.h时,编译器在处理时会陷入无限递归或跳过部分内容。即使使用头文件保护宏(#ifndef / #define / #endif),第一次处理a.h时会展开b.h,而b.h再次包含a.h时会被保护宏跳过。此时,若b.h依赖a.h中未完全定义的类或结构体,编译器会因类型未声明而报错。
下面是例子
Test1.h
#ifndef _TEST1_H_
#define _TEST1_H_
#include "Test2.h" // 直接依赖b.h
struct A { B* b_ptr; };
#endif
Test2.h
#ifndef _TEST2_H_
#define _TEST2_H_
#include "Test1.h" // 直接依赖a.h
struct B { A* a_ptr; };