我有这段代码,我试图将动态分配的数组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);
答案 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函数中有Player
到Players
的拼写错误
重要的是,您Guess
函数接受对Players
所以,你应该像Guess(*speil,*(speil->player))
一样打电话。
此外,numPlayers
未初始化这可能很危险。
答案 2 :(得分:0)
您需要实际的对象,而不是传递指针本身。相反,通过&amp; speil-&gt; player或* speil-&gt;播放器。取决于您的编译器。您还需要更改Guess()函数定义(类型拼写不一样)。