头文件相互引用
问题一:
A文件:
#include "B"
class A{
B b;
};
B文件:
#include "A"
class B{
A a;
};
出错原因:
1, A文件引用B的头文件,但是class B构造时A未定义。
B文件引用A的头文件,但是class A构造时B未定义。
2, A中定义B的变量,B中定义A的变量,会造成死循环 -- A调用B构造函数,B调用A构造函数。(感谢我有一个好学而且厉害的同事...总是能够一眼发现问题)
3,这个问题不可以用前置声明解决。
问题二:
A文件:
#include "B"
class A{
B b;
};
B文件:
#include "A"
class B{
A* a;
};
出错原因:
1, A文件引用B的头文件,但是class B构造时A未定义。
B文件引用A的头文件,但是class A构造时B未定义。
问题分析:
1,
解决方法:在其中指针对应的类之前前置声明另一个类
方法一:
A文件:
#include "B"
class A{
B b;
}
B文件:
class A;
class B{
A* a;
}
注:此时前置声明的位置必须是指针所对应的的那个类中。
如下则会出错:
#include "b.h"
class A;
class B {
A a;
};
#include "a.h"
#include "b.h"
class A{
B * b;
};
问题三:
#include "b.h"
class A{
B* b;
};
#include "a.h"
class B {
A* a;
};
出错原因:
1, A文件引用B的头文件,但是class B构造时A未定义。
B文件引用A的头文件,但是class A构造时B未定义。
解决方案:
方法一:在两个指针之前都前置声明
#include "b.h"
class A;
class B {
A* a;
};
#include "b.h"
class B;
class A{
B* b;
};
方法二:在其中一个指针之前前置声明
#include "a.h"
class B;
class A{
B * b;
};
#include "b.h"
#include "a.h"
class B {
A * a;
};