我是C ++的新手,可以帮我指针吗?我有一个结构

struct Slice
{
    Slice(): {}
    SliceObj *slObj;
};


和向量:

std::vector<Slice> slices;


因此,在mouce touch上,我想使用此对象来更改他的公共变量:

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-> rect.x = x + 0.1;并不能带来任何好处。

请帮我解决这个问题,我不明白如何从向量的另一个对象中小心地用*获得obj,然后小心地更改它的参数。
问题在于“如何从slice0仔细获取SliceObj”,而不是var的地址,而是这个实例。
因此,在这里我需要获取slObj参数,以便将来可以使slObj.rect.x = 1;

更新:
当我使用slObj-> drag方法时,我总是只看到像这样的奇怪数字:

但是,当glutPostRedisplay调用时,它在方法上重绘

void SliceObj::draw(SliceObj *slObj)


那一切都很好!

最佳答案

您应该通过迭代器访问元素:

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

关于c++ - vector 与结构中的对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20668636/

10-11 00:48