我正在开发一个openFrameworks项目,并且我使用vector
来存储3d网格索引位置。但是,在尝试访问数据时,我得到了:
error: no match for 'operator []' in ((icoSphere*)this)->icoSphere::subIndicies[i]
数据类型为ofIndexType
。
以下是一些片段
icoSphere.h文件:
// vector created
std::vector<ofIndexType> subIndicies;
icoSphere.cpp文件:
// items added to vector
ofIndexType indA = mesh.getIndex(0);
ofIndexType indB = mesh.getIndex(1);
ofIndexType indC = mesh.getIndex(2);
subIndicies.push_back(indA);
subIndicies.push_back(indB);
subIndicies.push_back(indC);
// iterate through vector
for (std::vector<ofIndexType>::iterator i = subIndicies.begin(); i !=subIndicies.end(); i++)
{
subMesh.addIndex(subIndicies[i]); // here is where the error occurs
}
向量和迭代器都是ofIndexType
(openFrameworks数据类型,本质上是无符号整数)。无法理清为什么它[]
不是运营商。
答案 0 :(得分:7)
std::vector::operator[]()
期望整数索引(a size_t
)引用矢量项:
0 --> 1st item
1 --> 2nd item
2 --> 3rd item
....
但在您的代码中,您将迭代器(不是整数索引)作为std::vector::operator[]()
的参数传递,这是无效的:
// *** 'i' is an iterator, not an integer index here *** // for (vector<ofIndexType>::iterator i = subIndices.begin(); i != subIndices.end(); i++) { subMesh.addIndex(subIndices[i]); // here is where the error occurs }
使用迭代器访问矢量项,或使用整数索引。
在C ++ 11 +中,也可以使用基于范围的for
循环。
// Integer index
for (size_t i = 0; i < subIndices.size(); ++i)
{
subMesh.addIndex(subIndices[i]);
}
// Iterator
for (auto it = subIndices.begin(); it != subIndices.end(); ++it)
{
subMesh.addIndex(*it);
}
// Modern C++11+ range for
for (const auto & elem : subIndices)
{
subMesh.addIndex(elem);
}
<强> PS 强>
请注意,当您递增迭代器时,最好使用预增量++it
而不是后增量it++
(it++
是“过早的悲观化” )。
答案 1 :(得分:5)
我是一个迭代器,只是做
subMesh.addIndex(*i);