创建类对象的数组

Create array of class object

本文关键字:数组 对象 创建      更新时间:2023-10-16

我试图在类对象多边形中创建类对象点的数组。当编译我得到几个错误,有人能帮我修复这些错误/建议创建一个类对象数组的更好的方法吗?

代码删除

当尝试编译时,我得到这些错误:

 Undefined symbols for architecture x86_64:
      "Point::MAX_VAL", referenced from:
          Point::Point() in ccyVCyNB.o
          Point::Point() in ccyVCyNB.o
          Point::Point(float, float)in ccyVCyNB.o
          Point::Point(float, float)in ccyVCyNB.o
          Point::set(float, float)in ccyVCyNB.o
          Point::setRange(float, float)in ccyVCyNB.o
      "Point::MIN_VAL", referenced from:
          Point::Point() in ccyVCyNB.o
          Point::Point() in ccyVCyNB.o
          Point::Point(float, float)in ccyVCyNB.o
          Point::Point(float, float)in ccyVCyNB.o
          Point::set(float, float)in ccyVCyNB.o
          Point::setRange(float, float)in ccyVCyNB.o
    ld: symbol(s) not found for architecture x86_64
Polygon::Polygon()
{
   numPoints = 0;
   points = new Point[numPoints];
}

您正在为0个类型为Point的对象分配内存。

你真的应该保存一个std::vector<Point>而不是数组:

class Polygon
{
private:
   int numPoints;
   std::vector<Point> points;
....
};

则不必担心析构函数、复制构造函数或复制赋值操作符。它的默认大小是0,所以默认构造函数变成

Polygon::Polygon() : numPoints(0) {}

和这个

Polygon::Polygon(int numPoints, float xArray[], float yArray[])
{
     for(int i = 0; i < numPoints; i++)
     {
       points.push_back(Point(xValues[i], yValues[i]));
     }
}

但实际上,您不需要数据成员numPoints,因为您可以从向量的大小中获得点的数量,即points.size()

编译错误的原因是MIN_VALMAX_VAL,它们是您在构造函数中声明并初始化的。因此,对它们的所有引用都未定义。

考虑使用

class Point {
...
};
float Point::MIN_VAL = -10.0f;
float Point::MAX_VAL = 10.0f;
class Polygon {
...
};