如何在 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.Setxboy.Sety)对您放置在 vec 数组中的 boy 没有影响。

为什么不只是一个std::vector&lt;jugador&gt;?当您想要更改其中一个玩家时,只需使用vector::operator []vector::at()vector 获取它,因为这两个函数都返回对您放置在向量中的boy 的引用。

【讨论】:

我不知道如何使用std::vector,但我现在就去google一下!感谢您的想法!

以上是关于如何在 C++ 的列表中保存对象(在本例中为玩家)?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 C++ 在 Ubuntu 中连接到 ALSA 服务器(在本例中为 Timidity)?

r 这显示了如何将DataTables插件(在本例中为TableTools)添加到您的Shiny应用程序中。

如何将 XML 文件(在本例中为业务流程事件日志)导入和查询到 SQL Server Express?

php 在特定订单状态之后奖励积分(在本例中为“已完成”)

将文本添加到道场图表(在本例中为散点图)

将自定义样式附加到 GWT CellTable(在本例中为所有单元格)