-1

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

代码已删除

尝试编译时出现以下错误:

 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
4

3 回答 3

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

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

于 2013-03-11T08:55:00.603 回答
1

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

考虑使用

class Point {
...
};

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

class Polygon {
...
};
于 2013-03-11T09:02:58.217 回答
1

你真的应该持有 anstd::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()

于 2013-03-11T09:03:22.810 回答