C++ 将当前对象存储在c++;

C++ 将当前对象存储在c++;,c++,C++,我想存储当前选择的对象(通过鼠标单击选择),然后在此对象上实现方法。当前选定的对象是从阵列中选择的: for(int i=0; i<trackList.size(); i++) { trackList[i].setSelected(false); if((trackList[i].isClicked(x,y)) && (!trackList[i].isSelected())) { trackList[i].setSelected(tr

我想存储当前选择的对象(通过鼠标单击选择),然后在此对象上实现方法。当前选定的对象是从阵列中选择的:

for(int i=0; i<trackList.size(); i++)
{
    trackList[i].setSelected(false);
    if((trackList[i].isClicked(x,y)) && (!trackList[i].isSelected()))
    {
        trackList[i].setSelected(true);
        currentSelected = trackList[i];
    }
}
您需要执行以下操作:

 currentSelected = &(trackList[i]);
为了给指针分配
轨迹列表[i]
的地址值

另一种方法是使用迭代器,如下所示:

std::vector<interface1::Track> trackList;
std::vector<interface1::Track>::iterator it, currentSelected;
for (it = trackList.begin(); it != trackList.end(); it++)
{
    it->setSelected(false);
    if((it->isClicked(x,y)) && (!it->isSelected()))
    {
        it->setSelected(true);
        currentSelected = it;
    }
}
std::向量跟踪列表;
std::vector::it迭代器,currentSelected;
for(it=trackList.begin();it!=trackList.end();it++)
{
它被选中(假);
如果((it->isClicked(x,y))&&(!it->isSelected())
{
它被选中(true);
currentSelected=it;
}
}

以后可以使用
currentSelected->setSelected(false)

您不会显示trackList存储内容的任何详细信息。什么是类型/类别声明?仅提供回答问题的信息是不够的。也许您应该使用指针,也许是否。从给定的代码示例中,我可以假设您在循环周期中只设置一次
currentSelected
。可能应该(给出我从代码中能理解的范围)使用操作员的地址,即:
currentSelected=&trackList[I]。然后我可以正常调用currentSelected指针上的方法来更改成员变量值,还是必须以不同的方式定义这些方法?您需要这样调用:
currentSelected->setSelected(false)
正在延迟指针。currentSelected的使用只是暂时的。当currentSelected指针超出范围时,或者如果向量发生更改,则它可能不再可用。可能向量已更改,因此您的迭代器不再指向正确的位置。或者更确切地说,使用
it
迭代器遍历向量,找到所选的一个,然后分配
currentSelected=it
 currentSelected = &(trackList[i]);
std::vector<interface1::Track> trackList;
std::vector<interface1::Track>::iterator it, currentSelected;
for (it = trackList.begin(); it != trackList.end(); it++)
{
    it->setSelected(false);
    if((it->isClicked(x,y)) && (!it->isSelected()))
    {
        it->setSelected(true);
        currentSelected = it;
    }
}