编程总结(四)C++中的前置声明
0x01 前置声明应用场景
一般来说,当你某个文件中,需要用到某个类或者结构体的指针,但是却不能直接包含那个类或者结构体的声明文件时,可以用前置声明解决。
重点:前置声明的类或者结构体,只能声明成指针变量,而且不能使用它的成员。因为声明一个指针变量,编译器能知道这个指针变量的类型,还能知道变量的大小(指针大小),所以能创建这个指针变量。但是如果声明成对象,编译器不知道该对象的成员,故不能为这个变量分配空间,从而会有一个使用未定义类型的错误。
0x02 使用方法
1、类的前置声明
class A;
class B
{
public:
A* a = nullptr;
B()
{
}
~B()
{
}
};
前置声明类A,则在声明之后,就能使用类A创建指针变量。
2、结构体的前置声明
某个地方,有如下定义
typedef struct st_C
{
//....
//某些成员
}C;
另外的文件,对结构体C的前置声明,只能用下面方式
struct st_C;
class D
{
public:
st_C* c = nullptr;
D()
{
}
~D()
{
}
private:
};
不能使用struct C;只能使用struct st_C;(具体原因我也不知道…)