[英]object from vector with structs
我是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->拖動方法時,我總是只看到像這樣的奇怪數字: 但是,當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);
}
您需要使用迭代器從向量中獲取元素。 在這里,您總是得到第一個要素。 嘗試這個:
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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.