【发布时间】:2012-12-28 14:38:11
【问题描述】:
我在尝试编译时收到错误sprite.h(20): error C2065: 'Component' : undeclared identifier(我还有几个其他文件)。下面是sprite.h 文件。我一辈子都想不通是什么导致了这个问题。
#ifndef SPRITE_H
#define SPRITE_H
#include "Image.h"
#include "Rectangle.h"
#include <string>
#include <SDL.h>
#include <vector>
#include "Component.h"
namespace GE2D {
class Sprite {
public:
Sprite();
Sprite(Image *i);
Sprite(Image *i, int x, int y);
Sprite(char *file, bool transparentBg, int x, int y, int w, int h);
virtual ~Sprite();
virtual void tick(SDL_Surface *screen, std::vector<Sprite*>* sprites, std::vector<Component*>* components);
virtual void handleEvent(SDL_Event eve);
virtual void draw(SDL_Surface *screen);
void setPosition(int x, int y);
const Rectangle& getRect() const;
const Image& getImage() const;
const Sprite& operator=(const Sprite& other);
Sprite(const Sprite& other);
protected:
private:
Image image;
Rectangle rect;
};
}
#endif
在.cpp文件中tick()是这样定义的:
void Sprite::tick(SDL_Surface *screen, std::vector<Sprite*>* sprites, std::vector<Component*>* components) {}
tick() 应该像现在一样采用两个向量,但也许有更好的方法可以解决这个问题?
编辑
根据要求,这里也是Component.h:
#ifndef COMPONENT_H
#define COMPONENT_H
#include "Rectangle.h"
#include "Component.h"
#include "Sprite.h"
#include <vector>
#include <SDL.h>
namespace GE2D {
class Component {
public:
Component();
virtual ~Component();
virtual void draw(SDL_Surface *screen) = 0;
virtual void tick(SDL_Surface *screen, std::vector<Sprite*>* sprites, std::vector<Component*>* components) = 0;
virtual void handleEvent(SDL_Event eve) = 0;
const Rectangle& getRect() const;
protected:
Component(int x, int y, int w, int h);
private:
Rectangle rect;
};
}
#endif
【问题讨论】:
-
显示
Component.h的内容 -
你确定“Component.h”定义了一个名为“Component”的类型吗?
-
@BoPersson,是的,它们似乎是一样的,我该怎么办?
-
@Ceilingbat - 您无需执行任何操作,我们只是将它们链接在一起,以便下一个遇到相同问题的人更容易找到它们。
标签: c++ vector compiler-errors undeclared-identifier