如何在 C++ 的列表中保存对象(在本例中为玩家)?
Posted
技术标签:
【中文标题】如何在 C++ 的列表中保存对象(在本例中为玩家)?【英文标题】:How to save objects (in this case, players) in a list in C++? 【发布时间】:2014-05-08 21:58:29 【问题描述】:我有一个具有以下属性的类播放器:int posx、int posy 和 int color。
void jugador::dibujar_jugador() // void draw player
gotoxy(x,y);
color(col);
cout << " O";
gotoxy(x, y+1);
cout << " <|> ";
gotoxy(x, y+2);
cout << " / \\";
然后我创建了一个团队来存储球员,其中包括:jugador vec[6] 和 int ultimo。 Int ultimo 用于列表的最后一个位置。
equipo::equipo() //Team
ultimo=-1; //Last position starts at -1
void equipo:: insertar_jugador(jugador J1) //Insert player
ultimo++; //vec increases size by 1
vec[ultimo] = J1;
void equipo:: mostrar_equipo(jugador boy) //Show team
int cont;
for (cont=0; cont<6; cont++) // When I change "<6" to "<=ultimo", the players don't show.
insertar_jugador(boy); // Insert player
vec[cont].dibujar_jugador(); //Draw player from vec
if (boy.Getcol() == 11)
boy.Setx(rand()%20);
boy.Sety(rand()%27);
else if (boy.Getcol() == 12)
boy.Setx(rand()%56);
boy.Sety(rand()%27);
仅当我输入 6(“ultimo”以外的任何值)时,显示团队的过程才有效,我知道这是因为没有保存任何内容。但是,为什么玩家列表中没有任何内容?
【问题讨论】:
【参考方案1】:您正在按值传递boy
。
void equipo:: mostrar_equipo(jugador boy)//show team
在函数内部,boy
是一个临时的。一旦该函数退出,boy
就不再存在。您需要通过引用传递boy
:
void equipo:: mostrar_equipo(jugador& boy)//show team
另外,当您调用insertar_jugador
时,该参数也按值传递,使insertar_jugador
在vec 中插入boy
的副本。但是您稍后的更改(您调用 boy.Setx
和 boy.Sety
)对您放置在 vec 数组中的 boy
没有影响。
为什么不只是一个std::vector<jugador>
?当您想要更改其中一个玩家时,只需使用vector::operator []
或vector::at()
从vector
获取它,因为这两个函数都返回对您放置在向量中的boy
的引用。
【讨论】:
我不知道如何使用std::vector以上是关于如何在 C++ 的列表中保存对象(在本例中为玩家)?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 C++ 在 Ubuntu 中连接到 ALSA 服务器(在本例中为 Timidity)?
r 这显示了如何将DataTables插件(在本例中为TableTools)添加到您的Shiny应用程序中。