0

我正在开发一款 Asteroids 游戏,以此来自学一些编程知识,但我遇到了一个错误,即我的一个班级没有命名类型。

我有一个从 Entity 类继承的 SpaceShip 类(两者都已定义),我有一个从 Entity 继承的 Bullet 类。我试图将 SpaceShip 成员放入 Bullet 类,以此来告诉谁射了子弹,但它一直告诉我“'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 );
...
};

子弹头文件

#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 类型?

4

1 回答 1

1

似乎(基于注释中的澄清)您的代码具有循环依赖项SpaceShip取决于Bullet哪个反过来又取决于SpaceShip。您需要重构代码以删除循环依赖项。

通常这可以通过Forward decleration轻松完成,但更高级的方法(更正确的 OOP)包括接口回调或更好的事件(信号)

于 2013-02-16T23:41:44.937 回答