-2

私はこのコードを持っていて、動的に割り当てられた配列spielをGuess関数に渡そうとしていますが、g ++から次のエラーが発生します

 error: invalid initialization of reference of type 'Player&' from expression of type
'Players*'
 Guess(*spiel, spiel->player); 

newポインターを返すので、配列を逆参照してはいけないと思いましたか?? 私のやり方の誤りを理解するのを手伝ってください。

struct Game;
struct Player;

void startGame(Game *game);
void Guess(Game &game, Player & player);
bool HasPlayers(Game &game);
void PlayerStats(Game &game);
void DestroyGame(Game *game);

struct Players{
   string name;
   int hits;
   int misses;
   int guesses;
   char playing;
  };


struct Game{
    int running;
    char level;
    int numPlayers;
    Players *player;

};

int main()
{
    Game *spiel = new struct Game();
    spiel->player = new Players[spiel->numPlayers];

    cout << "\nWelcome to Spiel v0.4\n\n";

    startGame(spiel);
    Guess(*spiel, spiel->player);    <===== this line produces the error
    HasPlayers(*spiel);
    PlayerStats(*spiel);
    DestroyGame(spiel);
4

3 に答える 3

2

あなたの前方宣言型は ですがPlayer、具体的な型はPlayers

アップデート:

struct Player;
void Guess(Game &game, Player & player);

struct Players;
void Guess(Game &game, Players & player);

または、それに応じてすべてPlayersを変更しPlayerます。

また、入力としてGuess1 つしか取りませんが、プレーヤーの配列で初期化されるため、型が一致しません。ただし、単一のプレーヤー オブジェクトを次のように渡すことができます。Playerspiel->player

Guess(*speil, spiel->player[0]);

Guessまたは、関数のシグネチャを変更して、の配列を受け入れることもできますPlayers

于 2013-08-03T00:27:37.730 に答える