“'SpaceShip'没有命名类型”,尽管SpaceShip肯定是一种类型

时间:2013-02-16 23:20:12

标签: c++ class types composition

我正在研究一个小行星游戏,作为一种教自己一些编程的方法,我收到这个错误,我的一个类没有命名类型。

我有一个继承自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类型?

1 个答案:

答案 0 :(得分:1)

似乎(根据评论中的说明)您的代码有Circular dependenciesSpaceShip取决于BulletSpaceShip依赖于{{1}}。您需要重新分解代码以删除循环依赖项。

通常可以使用Forward decleration轻松完成此操作,但更高级的方法(更多OOP正确)包括interfacescallbacks或更好的事件(信号)