矢量下标超出范围和多态性

时间:2016-08-04 12:14:42

标签: c++

在我的一个练习中,我必须编写头文件的cpp:triangle和polygon

在triangle.h文件中我有:

Triangle::Triangle(Point a, Point b, Point c)
{
 _points[0] = a;
 _points[1] = b;
 _points[2] = c;
}
Triangle::~Triangle(){}

所以在三角形的cpp文件中我这样做:

class Polygon
 { 
  public:
   Polygon();
   ~Polygon();
   virtual double perimeter() const;
  protected:
   vector<Point> _points;

此外,在多边形文件中,我拥有的头文件如下所示:

 Polygon::Polygon(){}
 Polygon::~Polygon(){}
 double Polygon::perimeter() const
 {
  return 0.0;
 }

};

所以我完成了这个文件的cpp:

public void addToRealm(Home item, RealmChangeListener<E> listener) {

    realm.executeTransaction((Realm realm1) ->
            realm1.copyToRealm(item).addChangeListener<Home>(listener));
}

但是当我想编译编译器时显示错误:向量下标超出范围,我不明白我什么时候把东西放在范围之外的向量中。所以,如果你有一个想法如何解决问题,请帮助我。 谢谢你!

1 个答案:

答案 0 :(得分:2)

因为您的矢量未使用适当的大小进行初始化:

Triangle::Triangle(Point a, Point b, Point c)
{
 _points.resize(3); // reserve space for 3 points.
 _points[0] = a;
 _points[1] = b;
 _points[2] = c;
}

或者使用push_back:

Triangle::Triangle(Point a, Point b, Point c)
{
 _points.push_back(a);
 _points.push_back(b);
 _points.push_back(c);
}