2013-02-16 2 views
0

나는 소행성 게임을 프로그래밍으로 배우는 방법으로 일하고 있는데,이 오류는 내 수업 중 하나 유형을 지정하지 않습니다."SpaceShip은 분명히 Type입니다. 비록 SpaceShip이 분명히 유형입니다."

나는 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 

왜 우주선의 유형을 찾는되지 않은 : 여기

는 일부 코드입니까?

+4

현재 [당신의 최소한의 테스트 케이스 (http://sscce.org) Forward decleration하지만 더 진보 된 방법으로 쉽게 수행 할 수 있습니다 . 지금까지 디버깅을 해왔 던 그 중 하나입니다. –

+0

'spaceship.h'는 아마도 무엇인가를 포함합니까? –

+1

우주선이 총알을 발사하기 때문에'spaceship.h'는'entity.h'와'bullet.h'을 포함합니다. – Goldentoa11

답변

1

코드에 Circular dependencies이있는 것으로 보입니다 (주석의 설명에 기반한 것 같습니다). SpaceShipBullet에 달려 있으며, 이는 다시 SpaceShip에 달려 있습니다. 순환 종속성을 제거하려면 코드를 다시 작성해야합니다.

보통이 (더 OOP 올바른) interfaces, callbacks 또는 더 나은 아직 이벤트 (신호)를 포함

관련 문제