簡體   English   中英

向量與結構中的對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM