我有一个这样定义的多边形类:
#include <gVector3.h> // an array containing three floats (x,y,z coordinates)
#include <vector>
class Polygon {
private:
std::vector <gVector3> vertices;
std::vector <gVector3> color;
我像这样重载了这个类的 [] 运算符
gVector3 Polygon::operator [](unsigned int i) const {
return vertices[i];
}
我写了一个简单的测试用例:
gVector3 v1(0,0,1), v2(1,1,1), v3(2,0,1);
Polygon *p = new Polygon();
p->push(v1);
p->push(v2);
p->push(v3);
assert(p[0] == v1); // Assume == for the gVector3 class has been defined correctly
推送是这样定义的..
void Polygon::push(gVector3 vec){
this->vertices.push_back(vec);
}
底线是这个断言失败了,我不确定为什么。也许我误用了 Vector 类索引方法?
任何见解都会有所帮助!
最佳答案
p
是一个指针,所以 p[0]
就是它指向的 Polygon
。我很惊讶它编译了;我想一定有一些奇怪的隐式类型转换。
您几乎肯定不想乱用指针和 new
:
Polygon p;
p.push(v1);
p.push(v2);
p.push(v3);
assert(p[0] == v1);
但如果您出于某种原因这样做,那么您需要在应用 []
assert((*p)[0] == v1);
关于c++ - 为标准 vector 对象重载运算符 [] 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21683200/