-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);

或将所有更改PlayersPlayer相应的。

Guess只接受一个Player作为输入,但spiel->player用一组玩家初始化,所以类型不匹配。但是,您可以将单人游戏对象传递给:

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

或者您可以更改Guess函数签名以接受Players.

于 2013-08-03T00:27:37.730 回答
1

正如@billz 提到的,Guess 函数中有一个错字Player更改Players

重要的是,您的Guess功能接受对Players

所以,你应该打电话给 like Guess(*speil,*(speil->player))

而且,也numPlayers初始化,这可能很危险。

于 2013-08-03T00:31:42.577 回答
0

您需要实际的对象,而不是传递指针本身。相反,传递 &speil->player 或 *speil->player。取决于你的编译器。您还需要更改 Guess() 函数定义(类型拼写不同)。

于 2013-08-03T00:33:08.520 回答