我有一个像这样定义的多边形类:
#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类索引方法?
任何见解都会有所帮助!
答案 0 :(得分:1)
p
是一个指针,因此p[0]
是它所指向的Polygon
。我很惊讶它汇编了;我猜必须有一些奇怪的隐式类型转换。
你几乎肯定不想乱搞指针和new
:
Polygon p;
p.push(v1);
p.push(v2);
p.push(v3);
assert(p[0] == v1);
但是如果你出于某种原因这样做,那么在应用[]
之前你需要取消引用指针
assert((*p)[0] == v1);
答案 1 :(得分:0)
p[0]
相当于*(p + 0)
,或仅*p
,所以它只是为您提供了您分配的Polygon
对象。您没有在该对象上调用operator[]
。您需要改为(*p)[0]
,这将首先获取Polygon
对象,然后调用operator[]
。