c++ 互相引用导致无限循环引用的报错

        在写一个大的程序时,常常要定义很多类,每个类有各自的用途。一个类很可能会包含另一个类定义的成员变量。假如有一个类A,一个类B。类A有一个成员变量B* b。类B有一个成员变量A* a。这时我们在定义类A和类B时会分别在开头时包含引用到的.h文件。这样会导致编译出错。

      具体例子如下:


Mutou.h文件代码如下:

#ifndef _Mutou_H_
#define _Mutou_H_

#include"MutouFSM.h"
#include"State.h"
#include"cocos2d.h"
USING_NS_CC;

class Mutou :public Node
{
public:
CREATE_FUNC(Mutou);
virtual bool init();


bool isTire();
bool isWantToWriteArticle();

void writeCode();
void writeArticle();
void rest();
MutouFSM* getFSM();
virtual void update(float dt);
private:
MutouFSM* mFSM;
};

#endif


MutouFSM.h文件代码如下:

#ifndef _MutouFSM_H_
#define _MutouFSM_H_

#include"Mutou.h"
#include"State.h"
#include"cocos2d.h"
USING_NS_CC;

class MutouFSM :public Node
{
public:
static MutouFSM* createWithMutou(Mutou* mutou);
bool initWithMutou(Mutou*mutou);
virtual void update(float dt);
void changeState(State*state);
private:
State* mCurState;
Mutou*mMutou;

};

#endif


类Mutou需要调用类MutouFSM,类MutouFSM需要调用类Mutou,我们理所当然会想到包含.h头文件。这样编译会出错:

错误 3 error C2143: 语法错误 : 缺少“;”(在“*”的前面) (..\Classes\MutouFSM.cpp) f:\ccs\fsm\classes\mutou.h 25 1 FSM

错误 6 error C2143: 语法错误 : 缺少“;”(在“*”的前面) (..\Classes\MutouFSM.cpp) f:\ccs\fsm\classes\mutou.h 28 1 FSM

出现上述的错误并不是由于我们编程时头脑发昏少加了“;”,而是两个.h文件互相调用,导致无线循环调用。


解决的办法是,在报错的那个.h文件的类定义前加上class声明调用的类(即class 类)。解决上面的错误是在Mutou.h的文件中,在class Mutou定义前声明class MutouFSM。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值