c ++将动态数组传递给

时间:2013-08-03 00:18:48

标签: c++

我有这段代码,我试图将动态分配的数组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);

3 个答案:

答案 0 :(得分:2)

您的转发声明类型为Player,但具体类型为Players

更新

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

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

或相应地将所有Players更改为Player

同样Guess只需要一个Player作为输入,但spiel->player会使用一系列播放器进行初始化,因此类型不匹配。但是,您可以在:

中传递单个玩家对象
Guess(*speil, spiel->player[0]);

或者您可以更改Guess函数签名以接受Players的数组。

答案 1 :(得分:1)

正如@billz所说,Guess函数中有PlayerPlayers的拼写错误

重要的是,您Guess函数接受对Players

的引用

所以,你应该像Guess(*speil,*(speil->player))一样打电话。

此外,numPlayers 未初始化这可能很危险。

答案 2 :(得分:0)

您需要实际的对象,而不是传递指针本身。相反,通过&amp; speil-&gt; player或* speil-&gt;播放器。取决于您的编译器。您还需要更改Guess()函数定义(类型拼写不一样)。