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

标签 c++

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

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

相关文章:

c++ - 这是什么控制风格?

c++ - 从指针访问 [] 运算符

c++ - 链接堆栈中的唯一指针

c++ - 为什么不调用析构函数?

c++ - 使用 Gdk::Pixbuf 创建的图像在显示时出现乱码

c++ - 检查两个图形是否互补的功能

c++ - 将字符串转换为C++中的变体

python - 如何使用 Python 访问属于对象的动态 C++ 数组变量?

c++ - 仅使用迭代器访问 C++ STL 映射

c++ - C++中奇怪的段错误