创建类对象的数组

时间:2013-03-11 08:50:01

标签: c++ class object

我正在尝试在类对象Polygon中创建类对象Point的数组。在编译时我遇到了几个错误,有人可以帮我修复这些错误/建议一个更好的方法来创建一个类对象数组吗?

CODE DELETED

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

 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

3 个答案:

答案 0 :(得分:1)

Polygon::Polygon()
{
   numPoints = 0;
   points = new Point[numPoints];
}

您正在为类型为Point的0个对象分配内存。这就是问题所在。

答案 1 :(得分:1)

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

考虑使用

class Point {
...
};

float Point::MIN_VAL = -10.0f;
float Point::MAX_VAL = 10.0f;

class Polygon {
...
};

答案 2 :(得分:1)

你应该持一个std::vector<Point>而不是数组:

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

然后您不必担心析构函数,复制构造函数或复制赋值运算符。它的默认大小为零,因此您的默认构造函数变为

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()