gpt4 book ai didi

c++ - 为标准 vector 对象重载运算符 [] 时出错

转载 作者:太空宇宙 更新时间:2023-11-04 11:40:13 24 4
gpt4 key购买 nike

我有一个这样定义的多边形类:

#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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com