我似乎找不到找到将int值分配给类方法内的2-d数组的解决方案。点和尺寸是通过其他功能设置的。我可以并且可能应该在这里使用vector,但是我想知道我会怎么做呢?另外,为了将来参考,我搜索了“类赋值变量内部的C ++ 2-d数组”,但没有得到这个答案,我缺少什么术语?
class MatrixGraph
{
public:
void askPoints();
void labelPoints();
void createMatrix();
void defineEdges();
void listEdges();
private:
void findDimension();
int points;
string* labelArr;
int dimension;
int** matrix;
};
void MatrixGraph::createMatrix()
{
findDimension();
int** matrix = new int*[dimension];
for (int i = 0; i < dimension; i++)
{
matrix[i] = new int[dimension];
}
}
void MatrixGraph::defineEdges()
{
int flag;
for (int i = 0; i < dimension; i++)
{
for (int j = 0; i < dimension; j++)
{
if (i != j)
{
cout << "Does " << i << " and " << j << " have an edge? Type 1 if it has one, 0 if not: ";
cin >> flag;
this->matrix[i][j] = flag;
}
else
{
this->matrix[i][j] = 0;
}
}
}
cout << endl;
}
这里的问题是matrix
您new
用来分配它的不是您在类中声明的那个。
这里 :
private:
int** matrix;
这matrix
是您的类成员变量,但是在您的createMatrix
函数中,您正在这样做:
int** matrix = new int*[dimension];
for(int i = 0; i < dimension; i++)
{
matrix[i] = new int[dimension];
}
这matrix
是一个局部变量,与您matrix
在类声明中声明的(类成员)无关。因此,当您尝试在defineEdges
函数using中使用它时this
,不会分配它。
因此,您需要createMatrix
像这样更改您的内容:
void MatrixGraph::createMatrix()
{
findDimension();
matrix = new int*[dimension];
for (int i = 0; i < dimension; i++)
{
matrix[i] = new int[dimension];
}
}
请记住,始终删除类析构函数中分配的指针,以避免内存泄漏。您的情况是这样的:
~MatrixGraph()
{
for(int i = 0; i < dimension; ++i)
{
delete[] matrix[i];
}
delete[] matrix;
//and maybe : delete labelArr;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句