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

Vector subscript out of range and polymorphism

本文关键字:范围 多态性 下标      更新时间:2023-10-16

在我的一个练习中,我必须编写头文件的cpp:三角形和多边形

在三角形.h文件中,我有:

class Triangle : public Polygon
{
 public:
  Triangle(Point, Point, Point);
  ~Triangle();
 private:
};

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

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

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

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

};

所以我完成了这个文件的cpp,如下所示:

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

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

因为您的向量没有用正确的大小初始化:

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);
}