错误 "not declared in the scope" 但有接口
Error "not declared in the scope" but with interfaces
你看,我一直在尝试创建一个 std::vector
,其中包含 IState
class 中的 Entity
class。两个 class 都是接口。
错误是
'Entity' was not declared in this scope
它指向:
protected:
std::vector <Entity*> ent_map;
里面IState.h
我已经尝试了几个小时来解决它。一旦我在 IState.h 中做了一个前向声明,但是一旦我做了并尝试使用向量,它就会喷出它是一个不完整的 class,所以我回到了第一点。
有什么想法吗?
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
#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_
"Entity.h"
的内容根本不会被收录
改变
#ifdef __ENTITY__
至
#ifndef __ENTITY__
顺便说一句:名称中包含双下划线或下划线开头后跟大写字母在C++中是保留的,需要注意。
你看,我一直在尝试创建一个 std::vector
,其中包含 IState
class 中的 Entity
class。两个 class 都是接口。
错误是
'Entity' was not declared in this scope
它指向:
protected:
std::vector <Entity*> ent_map;
里面IState.h
我已经尝试了几个小时来解决它。一旦我在 IState.h 中做了一个前向声明,但是一旦我做了并尝试使用向量,它就会喷出它是一个不完整的 class,所以我回到了第一点。
有什么想法吗?
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
#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_
"Entity.h"
的内容根本不会被收录
改变
#ifdef __ENTITY__
至
#ifndef __ENTITY__
顺便说一句:名称中包含双下划线或下划线开头后跟大写字母在C++中是保留的,需要注意。