我似乎无法找到将int值分配给类方法中的二维数组的解决方案。点和尺寸通过其他功能设置。我可以并且可能应该在这里使用矢量,但我想知道如何以愚蠢的方式做到这一点?同样为了将来的参考我搜索了“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;
}
答案 0 :(得分:0)
此处的问题是您使用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
的{{1}}函数中使用它时,它未被分配。
所以你需要改变你的this
:
createMatrix
请记住总是删除类析构函数中的已分配指针以避免内存泄漏。在你的情况下,像这样:
void MatrixGraph::createMatrix()
{
findDimension();
matrix = new int*[dimension];
for (int i = 0; i < dimension; i++)
{
matrix[i] = new int[dimension];
}
}