簡體   English   中英

錯誤:向量迭代器不兼容

[英]error: vector iterators incompatible

這是導致錯誤的行

vector<transform>::iterator transformIter;
    for (transformIter = (*objIter)->transforms.begin(); transformIter != (*objIter)->transforms.end(); objIter++) {
                    handleTransform((*transformIter));
                }

無論向量中有多少跨函數,它都會在循環的第二次迭代中發生。

obj結構如下所示:

struct obj {

    vector<glm::vec4> vertices;
    vector<int> elements;
    vector<object> objects;
    vector<transform> transforms;


};

而handleTransform函數是:

void handleTransform(transform currentTransform) {

    if (currentTransform.type == 'r') {
        glRotatef(currentTransform.coordinates.x, 1.0f, 0.0f, 0.0f);
        glRotatef(currentTransform.coordinates.y, 0.0f, 1.0f, 0.0f);
        glRotatef(currentTransform.coordinates.z, 0.0f, 0.0f, 1.0f);
    }

    if (currentTransform.type == 's') {
        glScalef(currentTransform.coordinates.x, currentTransform.coordinates.y, currentTransform.coordinates.z);
    }

    if (currentTransform.type == 't') {
        glTranslatef(currentTransform.coordinates.x, currentTransform.coordinates.y, currentTransform.coordinates.z);
    }

}

遍歷obj中的其他向量不會導致任何向量問題,因此我不得不想象這與handleTransform函數有關,但我無法弄清楚。

您錯誤地增加objIter ,而不是transformIter

for (transformIter = (*objIter)->transforms.begin(); 
     transformIter != (*objIter)->transforms.end(); 
     objIter++) // ??

它應該是:

for (transformIter = (*objIter)->transforms.begin(); 
     transformIter != (*objIter)->transforms.end(); 
     ++transformIter) 

為避免此類錯誤,請使用std::for_each ,或者如果使用C ++ 11,則是基於范圍的for循環:

http://en.cppreference.com/w/cpp/language/range-for

使用這些選項中的任何一個,您都無需聲明迭代器,在迭代到下一個項目時犯錯誤,或者如果不是這些問題,則執行后遞增而不是更快的預遞增迭代器(如原始代碼所做的那樣) )。

++transformIter替換objIter++

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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