c++将一个动态数组传递给a
c++ passing a dynamic array to a
我有这段代码,我正试图将动态分配的数组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函数中有一个从Player
到Players
的拼写错误更改
重要的是,您的Guess
函数接受对Players
的引用
所以,你应该像Guess(*speil,*(speil->player))
一样打电话。
而且,numPlayers
是未初始化,这可能是危险的。
您需要的不是指针本身,而是实际的对象。相反,通过&speil->player或*speil->播放器。取决于编译器。您还需要更改Guess()函数定义(类型拼写不同)。
相关文章:
- std::向量与传递值的动态数组
- 将数组动态分配到具有指针参数的函数中
- 我可以以某种方式使我的矢量/数组动态更改装置数量吗?
- 使用 new: "potentially uninitialized pointer"将对象数组动态分配给指针
- 为什么C 没有方便的方式来为多维数组动态分配内存
- 如何制作具有动态大小的数组?动态数组的一般用法(可能还有指针)
- c++中的数组动态内存分配
- 多维数组动态分配的内存图
- 如何在 c++ 中使用 2-D 固定数组为 4-D 数组动态分配内存
- C++ 我在数组/动态内存方面遇到了一些问题
- C++ 中从数组动态强制转换
- C++中高维数组动态内存分配的正确方法.
- 从 C++ 结构中包含的指针数组动态分配和访问内存
- 对象数组动态内存分配
- 为二维数组动态分配内存时出错
- 如何将2d数组动态分配给结构
- 为结构数组c++动态分配内存
- 将数组动态添加到多维数组
- 类中的类数组-动态数组(c++)有问题
- 分配对象数组动态冻结