class A
{
}
#include “A.h” //一般情况下直接引用A.h,就可以使用类A了
//class A; //有时候一定要声明A才能使用,这是为什么呢?
class B
{
A a;
}
{
}
#include “A.h” //一般情况下直接引用A.h,就可以使用类A了
//class A; //有时候一定要声明A才能使用,这是为什么呢?
class B
{
A a;
}
解决方案
10
class A;是前置声明,
10
class A; 前置声明,说明有个叫A的东西。这样B里面就可以用到声明A指针的变量。A *pa
lz的代码,假如只用前置声明(不include头文件A.h),那么A a这句编译不过。这时还不知道A到底是什么,不知道多大,没法分配空间给变量a。
lz的代码,假如只用前置声明(不include头文件A.h),那么A a这句编译不过。这时还不知道A到底是什么,不知道多大,没法分配空间给变量a。
10
函数参数,以及指针,引用的声明定义,只需要前置声明就够了
对象的定义,声明,需要类型的全部信息
对象的定义,声明,需要类型的全部信息
5
前置声明,是在没捡到类型定义的地方,先声明一下
不然的话,虽然是定义指针,这个类型也是没有定义的
之所以前置,是原因是C,C++ 对声明的顺序有要求,不仅仅是定义了就可以的
不然的话,虽然是定义指针,这个类型也是没有定义的
之所以前置,是原因是C,C++ 对声明的顺序有要求,不仅仅是定义了就可以的
5
指针,引用,不需要类型信息中的对象占用内存大小的信息。
所以,可以通过前置声明,在定义之前,或没见到定义的地方,声明,定义指针和引用
当真正用到他们的时候,这个指针,引用必须先初始化,才能使用
这种地方,需要类型的定义(全部信息)
头文件里面,并不需要类型的定义,就可以定义指针,引用
实现文件里,才需要
假如一个实现文件,并没有用到该类型,那么也不必要能见到类型的定义
所以,可以通过前置声明,在定义之前,或没见到定义的地方,声明,定义指针和引用
当真正用到他们的时候,这个指针,引用必须先初始化,才能使用
这种地方,需要类型的定义(全部信息)
头文件里面,并不需要类型的定义,就可以定义指针,引用
实现文件里,才需要
假如一个实现文件,并没有用到该类型,那么也不必要能见到类型的定义