2016-06-09 9 views
3

클래스를 포함하는 std::vector 클래스를 만들려고 시도한 것을 볼 수 있습니다. IState 클래스입니다. 두 클래스 모두 인터페이스입니다."범위에서 선언되지 않았지만"인터페이스가있는 오류

'법인'이 범위

에 선언하고 그것을 지적하지 않은

오류입니다 : 나는 '

protected: 
    std::vector <Entity*> ent_map; 

IState.h

내부 그것을 해결하기 위해 몇 시간 씩 노력해 왔습니다. 일단 IState.h에서 전방 선언을 만들었지 만 일단 벡터를 사용하려고 시도했지만 불완전한 클래스라는 것을 알았으므로 다시 사각형으로 돌아갔습니다.

아이디어가 있으십니까?

"Entity.h"의 내용은 전혀 포함되지 않습니다

#ifndef IState_ 
#define IState_ 

#include "Entity.h" 
#include <vector> 

class IState 
{ 
    public : 
    virtual ~IState(); 
    virtual void update() = 0; 
    virtual void render(SDL_Renderer* renderTarget) = 0; 
    virtual bool onEnter() = 0; 
    virtual bool onExit() = 0; 
    virtual void handleEvents(bool* gameLoop,SDL_Event event) = 0; 
    virtual void resume() = 0; 
    virtual std::string getStateID() = 0; 
    virtual void setStateID(std::string id) = 0; 

    protected: 
     std::vector <Entity*> ent_map; 

}; 


#endif // IState_ 
+1

[this] (http://stackoverflow.com/questions/228783/what-are-the-rules-about-using-an-underscore-in-a-c-identifier)를 참조하십시오. '__ENTITY__'을 다른 것으로 변경해야합니다. – juanchopanza

답변

11

Entity.h

#ifdef __ENTITY__ 
#define __ENTITY__ 

#include <iostream> 
#include <SDL.h> 

class Entity 
{ 
    public: 
    virtual ~Entity(); 
    virtual void load(const char* fileName, std::string id, SDL_Renderer* pRenderer) = 0; 
    virtual void draw() = 0; 
    virtual void update() = 0 ; 
    virtual void clean() = 0; 

    /*void int getX() { return m_x;} 
    void int getY() { return m_y;} 
    void std::string getTexID {return textureID;} 
    */ 


}; 


#endif // __ENTITY__ 

IState.h.

변경

#ifdef __ENTITY__ 

#ifndef __ENTITY__ 

에 BTW : 이름은 이중 밑줄을 포함하거나 C++에 예약되어 대문자 다음에 밑줄로 시작, 당신은주의 할 필요가있다.

+1

예약어입니다. – juanchopanza

+1

좋은 찾기! 아주 미묘한 오류. –

+0

@juanchopanza - 공정성에서 OP는 식별자를 먼저 사용했습니다. –