当头文件重复包含时,常常会遇到编译不过的情况,这时,只需要预先定义一下某变量或类即可:
例:
//a.h
#include "b.h"
class CTestA
{
public:
CTestB m_b; //error
}
//b.h
#include "a.h"
class CTestB
{
public:
CTestA m_a; //error
}
正确的做法是:
//a.h
#include "b.h"
class CTestB;
class CTestA
{
public:
CTestB *m_b; //改成指针类型
}
//b.h
#include "a.h"
class CTestA;
class CTestB
{
public:
CTestA *m_a; //改成指针类型
}
PS:
要给m_b分配内存只能在a.cpp的构造函数中进行,而不能在头文件中直接实现!!
例:
//a.h
#include "b.h"
class CTestB;
class CTestA
{
public:
CTestB *m_b; //改成指针类型
CTestA(){m_b=new CTestB;} //error C2036: ****: 未知的大小
}
同理,要对CTestB进行某操作,而此操作必须先知道sizeof(CTestB)的大小时,都必须要在
相应的*.cpp中进行实现!如 m_b++;则同样会报 error C2036 的错误