c++将一个动态数组传递给a

c++ passing a dynamic array to a

本文关键字:数组 动态 一个 c++      更新时间:2023-10-16

我有这段代码,我正试图将动态分配的数组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.4nn";
    startGame(spiel);
    Guess(*spiel, spiel->player);    <===== this line produces the error
    HasPlayers(*spiel);
    PlayerStats(*spiel);
    DestroyGame(spiel);

您的前向声明类型为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的数组。

如@billz所述,Guess函数中有一个从PlayerPlayers的拼写错误更改

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

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

而且,numPlayers未初始化,这可能是危险的。

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