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