我正在研究一个小行星游戏,作为一种教自己一些编程的方法,我收到这个错误,我的一个类没有命名类型。
我有一个继承自Entity类的SpaceShip类(两者都已定义),我有一个继承自Entity的Bullet类。我试图将一个SpaceShip成员放入Bullet类中,作为告诉谁射击子弹的一种方式,但它一直告诉我“'SpaceShip'没有命名类型”。
以下是一些代码:
spaceship.h
class SpaceShip : public Entity
{
private:
int lives;
int score;
int animationRow;
int shotsFired;
public:
SpaceShip();
void Init(SDL_Surface *image = NULL);
void Destroy();
void Update();
void Render( SDL_Surface *screen );
...
};
bullet.h
#ifndef BULLET_H
#define BULLET_H
#include <SDL/SDL_gfxPrimitives.h>
#include "entity.h"
#include "spaceship.h"
#include "Globals.h"
class Bullet : public Entity
{
private:
SpaceShip* owner;
public:
Bullet( SpaceShip* ship );
void Update();
void Render( SDL_Surface *screen );
void Destroy();
void Collided(int objectID);
};
#endif // BULLET_H
为什么不找到SpaceShip类型?
答案 0 :(得分:1)
似乎(根据评论中的说明)您的代码有Circular dependencies。 SpaceShip
取决于Bullet
,SpaceShip
依赖于{{1}}。您需要重新分解代码以删除循环依赖项。
通常可以使用Forward decleration轻松完成此操作,但更高级的方法(更多OOP正确)包括interfaces,callbacks或更好的事件(信号)