вектор — c ++ ошибка C2065: необъявленный идентификатор

Возможный дубликат:
Необъявленный идентификатор C ++ (но он объявлен?)

Я получаю ошибку 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

0

Решение

Sprite.h включает в себя Component.h который включает в себя Sprite.h, давая круговую зависимость, которая не может быть решена.

К счастью, вам не нужно включать заголовки вообще. Каждый класс ссылается только на указатель на другой класс, и для этого достаточно простого объявления:

class Component;
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]