0

プログラミングを独学する方法として Asteroids ゲームに取り組んでいますが、クラスの 1 つが型に名前を付けていないというエラーが発生しています。

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 );
...
};

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 タイプが見つからないのはなぜですか?

4

1 に答える 1

1

あなたのコードには循環依存関係があるようです(コメントの説明に基づいて)。SpaceShipは に依存しBullet、 は に依存しSpaceShipます。循環依存関係を削除するには、コードをリファクタリングする必要があります。

通常、これはフォワード宣言で簡単に達成できますが、より高度なメソッド (より OOP が正しい) には、インターフェイスコールバック、またはより良いイベント (シグナル)が含まれます。

于 2013-02-16T23:41:44.937 に答える