1

このコードをコンパイルしようとすると、次のエラーが表示されます。なぜですか?

"game.h:48:42: エラー: 'player' に型名がありません

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
4

2 に答える 2

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);
于 2013-07-08T01:48:32.220 に答える
-1

playerタイプではないので; struct playerは。

于 2013-07-08T01:47:07.217 に答える