类的互相包含
假设有两个类
#include "B.h"
class A {
private:
B *b;
};
#include "A.h"
class B {
private:
A *a;
};
编译时编译器会提示类A或类B未定义 这是由于两个类互相引用对方
造成类似先有鸡还是先有蛋的问题 编译器无法正常的按顺序编译代码
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
前向声明
C/C++支持前向声明 前向声明的意义是告诉编译器声明的结构是一个类/结构体
编译器据此继续向下编译代码 直到碰上B的定义将B也编译.
class B;
class A {
private:
B *b;
};
- 1
- 2
- 3
- 4
- 5
- 6
- 7
解决技巧
A的头文件中不再包含B的头文件 而是前向声明B为一个类
A的实现文件中包含B的头文件
这样就能解决互相包含问题 通过编译.
class B;
class A {
private:
B *b;
};
#include "A.h"
class B {
private:
A *a;
};