Ошибка: «Sprite» не был объявлен в этой области - PullRequest
0 голосов
/ 27 сентября 2019

Я пишу игру, и мне нужно создать вектор спрайта, который представляет врагов в моей структуре карты, но поскольку map.h включает sprite.h и наоборот, у меня ошибка 'Sprite' is not declared in this scope.Я слышал о предварительной декларации;это решение?

#ifndef SPRITE_H
#define SPRITE_H

#include "map.h"
#include "anim.h"

struct Sprite
{
    Animation an;
    float x,y;
    int w,h;
    float vx,vy;
    bool air;
    int right, left, top, bottom;
    int sens;
};

void InitSprite(Sprite* sp,Charset* c,float x,float y,int nbstats);
int EssaiDeplacement(Map* m,Sprite *sp,float vx,float vy);
void Affine(Map* m,Sprite *sp,float vx,float vy);
void Move(Map* m,Sprite *sp,const Uint8 *keys);
void RenderSprite(Sprite* sp,Charset* c);
void Tile_Collision(Sprite* sp,Map* m);
void Evolue(Sprite* sp,const Uint8 *state);

#endif
#ifndef MAP_H
#define MAP_H

#include <string>

#include "mario.h"
#include "sprite.h"

struct Map
{
    Charset* c;
    int xtiles_level,ytiles_level;
    std::vector<std::vector<int> >tableau;
    std::vector<int> tiles;
    std::vector<std::vector<int> > limits;
    std::vector<Sprite> enemys;
};

void Load_Tiles(Map* m,Charset* c,const char* fichier,int largeur_monde,int hauteur_monde);
void Load_Level(Map* m,const char* fichier);
void AfficherMap(Map* m,SDL_Renderer* renderer);
void SaveMap(Map* m,const char* fichier);
int TileCollision(SDL_Rect *test,Map* m);

#endif

Ошибка в map.h.

1 Ответ

0 голосов
/ 27 сентября 2019

Видя циклическую избыточность в вашем коде!Форвардная декларация должна решить проблему.Другой способ:

#ifndef COMMON_H
#define COMMON_H

#include "anim.h"

struct Sprite
{
};

struct Map
{
};

#endif

#ifndef SPRITE_H
#define SPRITE_H

#include "common.h"

void InitSprite(Sprite* sp, Charset* c, float x, float y, int nbstats);
/* ... */
#endif

#ifndef MAP_H
#define MAP_H

#include "common.h"
#include "mario.h"
#include "sprite.h"

void Load_Tiles(Map* m, Charset* c, const char* fichier, int largeur_monde, int hauteur_monde);
/* ... */
#endif
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...