错误:'Sprite'未在此范围内声明
Error : 'Sprite' was not declared in this scope
我写了一个游戏,我需要创建一个代表地图结构中敌人的精灵向量,但由于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
相关文章:
- 错误:未在此范围内声明'reverse'
- 错误:"imread"未在此范围内声明
- 未在此范围内声明错误 'xy'
- Socklen_t未在此范围内声明
- 错误:'[' 之前预期的非限定 id 和错误:'users'未在此范围内声明
- "Main"已在当前范围内声明
- c++ 变量在宏的扩展中没有在这个范围内声明
- C++ 在编译过程中 strtok 函数 Eclipse 说没有在范围内声明?
- 'num1'未在此范围内声明
- 如何找到在本地范围内声明的变量的地址?
- NT状态未在此范围内声明
- 变量未在此范围内声明 数组线性搜索
- 包含文件中的 Typdef "未在此范围内声明"
- 'ClassName'和'ClassInstance'未在此范围内声明
- C++ 中的类之间的数据重新循环 - 错误:'<class name>'未在此范围内声明
- 代码作为 C 文件工作,但不作为C++文件,错误:'__builtin_types_compatible_p'未在此范围内声明
- 如何修复错误:"vreinterpretq_u32_f64"未在此范围内声明 - 在Android上使用Eigen构建
- 如何修复C++中的"arrStud未在此范围内声明"错误
- 错误:"SHGetKnownFolderPath"未在此范围内声明
- 错误:'Sprite'未在此范围内声明