创建类对象的数组
Create array of class object
我试图在类对象多边形中创建类对象点的数组。当编译我得到几个错误,有人能帮我修复这些错误/建议创建一个类对象数组的更好的方法吗?
代码删除当尝试编译时,我得到这些错误:
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_VAL
和MAX_VAL
,它们是您在构造函数中声明并初始化的。因此,对它们的所有引用都未定义。
考虑使用
class Point {
...
};
float Point::MIN_VAL = -10.0f;
float Point::MAX_VAL = 10.0f;
class Polygon {
...
};
相关文章:
- 销毁C++中动态分配的内存(数组对象)
- 数组对象的生存期是否在重用其元素存储时结束?
- 为什么顶点数组对象会导致错误?
- 具有纯虚函数和指针数组对象类型的父类的指针数组
- 这是使用构造函数初始化数组对象的最佳方法吗?
- OpenGL 顶点数组对象与 tinyobjloader
- 将数组/对象/结构列表从C#库中传递给C MFC应用程序
- C++ RapidJson 帮助反序列化数组对象
- ptrdiff_t可以表示指向同一数组对象元素的指针的所有减法吗?
- 检查成员函数是否返回临时对象或数组对象
- 为什么 std::variant 不能容纳数组对象类型,而联合可以?
- 当数组对象以函数参数传递时,为什么复制构造函数会自称
- 如何使用箭头指针打印出一类数组对象,这些对象中有多个分数
- C++17 std::shared_ptr<> 类数组对象的重载运算符 []
- 添加两个具有运算符重载的数组对象,从而导致分段错误
- opengl:两个不同的矢量可以绑定到同一个顶点数组对象吗
- 使用相同的数据填充数组对象或使用指针
- 方法用于最快的分配,并且不需要将动态大小的数组对象作为局部变量
- 如何将2d数组对象传递给c++中的函数
- ReferenceTable溢出(jni-android),数组对象释放