我正在尝试在类对象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
答案 0 :(得分:1)
Polygon::Polygon()
{
numPoints = 0;
points = new Point[numPoints];
}
您正在为类型为Point
的0个对象分配内存。这就是问题所在。
答案 1 :(得分:1)
编译错误的原因是MIN_VAL
和MAX_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()
。