同时导入继承于一个基类的两个子类时,报错Redefinition of "class",求大神帮忙

两个子类继承于一个基类,当在要使用的类中导入其中一个子类编译每问题,当两个子类都适用#include""导入的时候 基类回报redefinition of "***"的错误

代码如下:
基类:
#ifndef ShooterGame__BaseClass
#define ShooterGame__BaseClass

#include “cocos2d.h”
#include “Definition.h”

#endif /* defined(ShooterGame__BaseClass) */

class BaseClass : public cocos2d::Sprite {

private:
//------property------

//------function------

public:
//------property------
cocos2d::Size winSize;

//------function------
virtual bool init();
BaseClass();
virtual ~BaseClass();
void setPosition(cocos2d::Point pointShip);

};

第一个子类:
#ifndef ShooterGame__ShipEntity
#define ShooterGame__ShipEntity

#include “cocos2d.h”
#include “Definition.h”
#include “BaseClass.h”

#endif /* defined(ShooterGame__ShipEntity) */

class ShipEntity : public BaseClass {

private:
//--------property--------
void upData(float delta);

//--------funtion---------

public:
//--------property--------
cocos2d::Point velocity;

//--------function--------
ShipEntity();
virtual ~ShipEntity();
bool init();
void invincible(float dt);

};

第二个子类:
#ifndef ShooterGame__EnemyEntity
#define ShooterGame__EnemyEntity

#include “cocos2d.h”
#include “BaseClass.h”

#endif /* defined(ShooterGame__EnemyEntity) */

class EnemyEntity : public BaseClass {

private:

public:
//------property------

//------function------
EnemyEntity();
virtual ~EnemyEntity();
bool init();

};

当我在其他要用到这两个子类的类中用#include导入的时候基类会包错

(1)只导入一个子类时不报错
#include “cocos2d.h”
#include “GameSceneBackground.h”
#include “Definition.h”
#include “ShipEntity.h” //第一个子类

(2)两个子类一起导入的时候报错
#include “cocos2d.h”
#include “GameSceneBackground.h”
#include “Definition.h”
#include “ShipEntity.h” //第一个子类
#include “EnemyEntity.h” //第二个子类

在基类中报错:
class BaseClass : public cocos2d::Sprite { //这一行显示------Redefinition of “BaseCalss”

求大神们给点解释,本人刚接触C++,在这浪费了很多时间。

#endif /* defined(ShooterGame__EnemyEntity) /
#endif /
defined(ShooterGame__EnemyEntity) */
这种东西要写在文件的末尾,才好用

#ifndef ShooterGame__BaseClass
#define ShooterGame__BaseClass

#include “cocos2d.h”
#include “Definition.h”

class BaseClass : public cocos2d::Sprite {

private:
//------property------

//------function------

public:
//------property------
cocos2d::Size winSize;

//------function------
virtual bool init();
BaseClass();
virtual ~BaseClass();
void setPosition(cocos2d::Point pointShip);

};
#endif /* defined(ShooterGame__BaseClass) */

第一个子类:
#ifndef ShooterGame__ShipEntity
#define ShooterGame__ShipEntity

#include “cocos2d.h”
#include “Definition.h”
#include “BaseClass.h”

class ShipEntity : public BaseClass {

private:
//--------property--------
void upData(float delta);

//--------funtion---------

public:
//--------property--------
cocos2d::Point velocity;

//--------function--------
ShipEntity();
virtual ~ShipEntity();
bool init();
void invincible(float dt);

};
#endif /* defined(ShooterGame__ShipEntity) */

第二个子类:
#ifndef ShooterGame__EnemyEntity
#define ShooterGame__EnemyEntity

#include “cocos2d.h”
#include “BaseClass.h”

class EnemyEntity : public BaseClass {

private:

public:
//------property------

//------function------
EnemyEntity();
virtual ~EnemyEntity();
bool init();

};
#endif /* defined(ShooterGame__EnemyEntity) */

=>改成这样,理论上不会有问题了

现在可以了 ,谢了

原因是:如果把endif放在类定义之前,那么只要包含了这个头文件,就会定义类,所以要放在文件末尾,如果该头文件已经引用过了,即声明了那个宏,就会直接跳到文件末尾!