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