2013-02-16 46 views
0

我正在研究一個Asteroids遊戲,作爲一種教自己一些編程的東西的方法,而且我得到這個錯誤,我的一個類不會命名一個類型。「'SpaceShip'不會命名爲」類型「,即使SpaceShip肯定是一種類型

我有一個從實體類繼承的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 

爲什麼沒有找到飛船類型?

+4

目前[你最少測試用例(http://sscce.org) 。你知道,到目前爲止你一直在調試的那個。 – 2013-02-16 23:21:55

+0

'spaceship.h'可能包含任何東西嗎? – 2013-02-16 23:23:39

+1

'spaceship.h'包含'entity.h'和'bullet.h',因爲船會發射一顆子彈 – Goldentoa11 2013-02-16 23:26:21

回答

1

看來(根據評論的說明)你的代碼有Circular dependenciesSpaceShip取決於Bullet,而這又取決於SpaceShip。您需要重新分配代碼以刪除循環依賴項。

通常,這可以很容易地與Forward decleration但更先進的方法來完成(更正確OOP)包括interfacescallbacks或更好,但事件(信號)

相關問題