我一直在尝试许多不同的方法来根据文本文件输入的数据创建2D矩阵。但是,我尝试的每种方式都会遇到错误。下面代码中的方法是错误最少的方法,但是仍然在返回对象上收到错误消息,指出我正在使用未初始化的内存“矩阵”。抱歉,如果这是一个简单的修复程序,那么我对C ++还是陌生的。
我以前曾尝试过向量的向量,但是遇到了尺寸错误的问题。如果有人有更好的方法从文本文件创建字符矩阵,请告诉我!
char** GetMap(int& M, int& N) //function to get the map of a room
{
int M = 0; // initializing rows variable
int N = 0; // initializing columns variable
char** matrix; //give a matrix
cin >> M >> N;
for (int rows = 0; rows < M; rows++)
{
for (int cols = 0; cols < N; cols++)
{
cin >> matrix[rows][cols];
}
}
return matrix;
}
答案 0 :(得分:3)
首先让我告诉您,您要在M
输入中请求N
和std::cin
,但是您已经将它们作为函数char** GetMap(int& M, int& N)
的参数了。 / p>
现在,您可能需要使用std::vector
。实际上,您想使用两个变量M和N初始化char** matrix
,这在适当的C ++中是不允许的。
解决此问题的一种好方法是使用std::vector<std::vector<char>> matrix
而不是char** matrix
。这是一个可以满足您期望的解决方案
std::vector<std::vector<char>> GetMap(int& M, int& N) //function to get the map of a room
{
std::vector<std::vector<char>> matrix{}; //give a matrix
char char_buf;
for (int rows = 0; rows < M; rows++)
{
matrix.push_back(std::vector<char>()); //Put a new empty row in your matrix
for (int cols = 0; cols < N; cols++)
{
std::cin >> char_buf; //Here you get a char from std::cin
matrix.back().push_back(char_buf); //That you push back in your sub-vector
}
}
return matrix;
}