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;
}
}