声明:我把class定义的类型称为类,struct定义的类型称为结构体。
C++中,如果要在一个类A的声明中用到另一个类B的指针或引用,需要包含类B的头文件,如果不想包含,可以使用向前声明。
但是,如果是结构体(struct定义的),好像不支持向前声明,C++中类和结构体差别不大,只是默认权限不同(class默认为私有,struct默认为公有),所以如果想使用向前声明,请使用class定义类型。
但是如果类A的声明中用到类B的对象,则必须包含类B的头文件,向前声明无效。
说明示例:
//A.h
struct Astruct{
int i;
};
class Aclass{
int b;
};
//C.h
class Aclass;//类Aclass的向前声明
class Cclass{
Aclass* pAc;
};
//D.h
struct Astruct;//无效,编译通不过,必须包含A.h或将Astruct的声明struct改为class
class Dclass{
Astruct* pAs;
};