尝试编译此代码时出现以下错误,为什么?
" game.h:48:42:错误:'播放器'未命名类型
game.h:48:50:错误:ISO C ++禁止声明'敌人',没有类型[-fpermissive]"
第48行是函数" fillMap"顺便说一句
//game.h
#ifndef GAME_H
#define GAME_H
//CONSTANTS AND TEMPLATES
const int LEN = 40;
struct player
{
char name[LEN]; //name of character
char symbol; //character representing player on map
int posx; // x position on map
int posy; // y position on map
bool alive; // Is the player alive
double damage; // Player attacking power
double health; // Player health
};
enum direction {LEFT, RIGHT, UP, DOWN};
//PROTOTYPES
//move amount specified in position structure
void moveAmount(player& pl, int posx, int posy);
//move to specified position on map
void moveTo(player& pl, int posx, int posy);
//one player attacking other
//returns whether attack was successfull
bool attack(const player & atacker, player & target);
//one player attacking a direction on the map, epl is a pointer to an array of enemies players
//returns whether attack was sucessfull
bool attack(const player & pl, direction, player* epl);
//Check if player is dead, to be called inside attack function
inline bool isDead(const player& pl){
return pl.health <= 0 ? 1 : 0;
}
//Remove player from map if he is dead
void kill(player& pl);
//Initialize map
void fillMap(const player& player, const player* enemies, int mapWidth, int mapHeigth);
//Display map
void displayMap(const int mapWidth, const int mapHeigth);
#endif
答案 0 :(得分:4)
问题在于这一行:
void fillMap(const player& player, const player* enemies, int mapWidth, int mapHeigth);
由于您将player
声明为参数,因此它仍然在整个前向声明的范围内。因此,其名称会影响类型名称player
:在fillMap
的转发声明中,player
指的是第一个参数,而不是player
类型。
将其重命名为pl
以解决此问题:
void fillMap(const player& pl, const player* enemies, int mapWidth, int mapHeigth);
答案 1 :(得分:-1)
因为player
不是类型; struct player
是。