在不同的类C++中构造类属性数组

Constructing an array of class attribute in a different class C++

本文关键字:属性 数组 C++      更新时间:2023-10-16

我必须做一个项目,其中一个类Row有一个整数数组int* OneArray然后另一个类Array有一个第一类Row* TwoDArray数组。 从本质上讲,该类在整数上有一个 2D 数组,当它在一个类中时,我可以轻松地构造 2D 数组。然而,现在我完全被难住了。

Row的构造非常简单:

//set length of array
numOfRows = intRows;
//Create space for array
OneArray = new int[intRows];
//populate array with random numbers
for(int i=0; i<intRows; i++)
{
OneArray[i] = GenerateRandom(9,0);
}

这就是我被困的地方(Array的建设):

//Set Number of Cols
NumOfCol = intCols;
//create length for each row
int intLength = 4;
for(int i=0; i<NumOfCol; i++)
{
//create space and call row constructor with length
TwoDArray = new Row(intLength);
//increase length for jagged array
intLength++;
}

就像现在一样,它在每个 for 循环之后写入当前数组(这是预期的)。所以,我需要像TwoDArray[i]这样的索引TwoDArray,但是一旦我尝试这样做,就会出现此错误:

"从'行*'到'常量行&'的用户定义转换无效。">

注意:如果我将行从for循环中取出,则仅创建第一个数组,直到intColintLength正在增加,因为我在技术上需要一个交错数组,每个数组中都有不同的大小。

我的类看起来像这样:

class Row
{
public:
//Constructors
Row();
Row(int intRows);
Row(const Row& objPrev);
//Accessors
int getNumOfRows();
int getRowArray(int intRow);
//Mutators
void setRowArray(int intRow, int intChange);
//Destructor
~Row();
private:
int* OneArray;
int numOfRows;
}

class Array
{
public:
//Constructors
Array();
Array(int intRows, int intCols);
Array(const Array& objPrev);
//Accessors
int getNumOfCol();
Row getTwoDArray(int intCol, int intRow);
//Mutators
void setTwoDArray(int intCol, int intRow, int intChageTo);
//Destructor
~Array();
private:
Row* TwoDArray;
int NumOfCol;
}

任何帮助或建议不胜感激。

在循环中Array多次分配单个Row对象,覆盖每个循环中的指针。这会导致内存泄漏,因为只有最后一个可以通过变量TwoDArray可用。此外,在循环结束时,您将拥有一个仅包含一个元素的"数组",即最后分配Row对象。

问题是不能在调用特定构造函数的同时使用new[]进行数组分配。你不能做例如

TwoDArray = new Row[NumOfCol](intLength);

相反,您必须将分配和初始化分为两部分:

TwoDArray = new Row[NumOfCol];  // Allocates memory, default constructed Row objects
for (int i = 0; i < NumOfCol; ++i)
{
TwoDArray[i] = Row(intLength);  // Initialize each element
}

这当然需要您遵循三或五(或零)的规则才能使循环中的复制正常工作。