c++ - 错误:未在此范围内声明“Sprite”
问题描述
我写了一个游戏,我需要在我的地图结构中创建一个代表敌人的精灵向量,但是因为 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 中。
解决方案
在您的代码中看到循环冗余!前向声明应该可以解决这个问题。另一种方式:
#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
推荐阅读
- flutter - 在 Flutter 网站上展示广告(flutter web app)
- wpf - MvvmCross:在另一个视图中查看(或等效于 CaliburnMicro Conductor)
- python-3.x - 我收到错误:“列表分配超出范围”
- angular - 用户第一次单击时,角度材料未设置正确的数据值
- amazon-web-services - 从 aws ec2 连接到远程网络
- c# - 触发回调活动后,PushModalAsync 无法正常工作
- python - 在一个图中添加多个图形
- ios - 我可以在 SwiftUI iOS 14 中禁用特定的小部件大小吗
- javascript - 使用 javascript 在按钮上切换文本
- c# - 我正在尝试在 Unity 上制作 2D 平台游戏,但我的角色在没有来自控制器的任何输入的情况下一直飞到一边