我对c ++很陌生,你能指点一下吗?我有一个结构
struct Slice
{
Slice(): {}
SliceObj *slObj;
};
和vector:
std::vector<Slice> slices;
所以在mouce touch上我想把这个对象改成他的公共var:
for (vector<Slice>::iterator it = slices.begin(); it != slices.end(); ++it) {
Slice slice0 = slices[0];
SliceObj *slObj = slice0.slObj;
slObj->drag(slObj, x, y);
}
当然,当我使用拖动方法时,可以使用:slObj-&gt; rect.x = x + 0.1 ;,它没有任何好处。
请帮助我,我无法理解如何从矢量中的另一个对象中仔细地获取*,然后小心地改变它的参数; 麻烦在于“如何从slice0小心地获取SliceObj”,而不是var的地址,而是这个实例。 所以在这里我需要获得slObj param,以后我可以使slObj.rect.x = 1;
更新: 当我制作slObj-&gt;拖动方法时,我总是只看到奇怪的数字: 但是,当glutPostRedisplay调用时,它会重新绘制方法
void SliceObj::draw(SliceObj *slObj)
然后一切都很好!
答案 0 :(得分:1)
您应该通过迭代器访问该元素:
for (vector<Slice>::iterator it = slices.begin(); it != slices.end(); ++it) {
Slice& slice0 = *it //Get the element using iterator (Note the reference, is to avoid copy)
SliceObj *slObj = slice0.slObj;
slObj->drag(slObj, x, y);
}
但是,如果你有一个支持C ++ 11的编译器,你可以使用基于范围的for循环来简化:
for( auto& slObj : slices )
{
liceObj *slObj = slice0.slObj;
slObj->drag(slObj, x, y);
}
答案 1 :(得分:0)
您需要使用迭代器从向量中获取元素。在这里,你总是得到第一个元素。试试这个:
for (vector<Slice>::iterator it = slices.begin(); it != slices.end(); ++it) {
Slice slice0 = *it //Get the element using iterator
SliceObj *slObj = slice0.slObj;
slObj->drag(slObj, x, y);
}