在某些应用场合,会发生两个头文件之间相互包含,导致头文件间无限死循环包含,编译无法通过。
解决方法其实很简单,在其中一方的源码文件包括头文件即可。但这个“其中一方”有点讲究,最好在设计原则上属于特殊的一方。
下面是例子:
//Proc1.h
class Proc1{
public:
Proc1();
~Proc1();
void func();
};
//Proc1.cpp
include "Proc1.h"
include "ProcMgr.h" //在这里包含
void Proc1::func()
{
ProcMgr::getInstance()->switchProc();
}
//ProcMgr.h
include "Proc1.h"
class ProcMgr{
public:
static ProcMgr* getInstance();
void switchProc();
protected:
ProcMgr();
~ProcMgr();
Proc1 proc1;
static ProcMgr* Instance;
};
//ProcMgr.cpp
ProcMgr* ProcMgr::Instance = NULL;
ProcMgr* ProcMgr::getInstance();
{
if (NULL == Instance)
{
Instance = new ProcMgr();
}
return Instance;
}
当然,出现相互包括的情况,设计上需要反查下,以避免后面更麻烦的耦合出现!