c++中类必须先声明,再定义
如果两个类相互引用形成一个环形引用时,无法先定义再使用,这时就要用到前向声明。
前向生命的类不能实例化,只能定义指针或者引用
虽然在头文件中不能include互相包含,但是在定义文件中要用include引用类
下面看一个例子:
//B.h
#ifndef _B_H_
#define _B_H_
class B
{
private:
A a;
};
#endif
//A.h
#ifndef _A_H_
#define _A_H_
class B;
class A
{
private:
B *b;
//B b; //error 不能实例化,因为只有类的声明,类的具体细节不知道
};
#endif
#include "A.h"
//#include "B.h" //只引入B.h是不对的,但是只引入A.h是对的
int main()
{
A a;
}