C ++中的二维矢量问题
2D vector issue in c++
这是更大的基本扫雷程序的一部分。在该程序的主 cpp 文件中,我将矩阵的所有值加载到 int 类型的二维向量中。基本上这个矩阵由 1 和 0 填充,它们将用于指示是否有地雷。我已经通过 cout 确认原始向量和引用向量都在输出我加载到它们中的矩阵。
我创建了一个包含 3 个不同条件的结构单元。我创建了一个单元格类型的二维向量,它基本上同时创建了 3 个向量。我无法将引用向量的值 1 和 0 加载到 minesweeperBoard[i][j].isMine.
这是我的代码:
include <iostream>
include <vector>
using namespace std;
struct cell{
int state; //( 0 hidden, 1 revealed, 2 marked)
int value; //(-1 mine, 0 no surrounding, # > 0 number of surrounding mines)
bool isMine;
};
void minesweeper(int row, int col, int numOfMines, vector<vector<int> >&mineField) {
rowNum = row;
colNum = col;
minesNum = numOfMines;
int temp;
for (int i = 0; i < rowNum; i++) {
for (int j = 0; j < colNum; j++) {
temp=mineField[i][j];
if (temp ==0) {
minesweeperBoard[i][j].isMine = false; //will set minesweeper to false if the condition is met
}
else {
minesweeperBoard[i][j].isMine = true; //wil set minesweeper to true if the condition is met
}
}
}
}
程序正在编译,但一旦编译到此点就会抛出错误。我做错了什么,这不是我应该如何将状态转移到 isMine 向量。
在我的main中,我打开文件并读取了几条数据,行,列和地雷数量。然后该文件包含一个由所述行和列组成的巨大矩阵,我将其输入向量。然后我传递向量。请记住,原始的 void 函数实际上是一个 class 成员,因此 main 中的声明类似于它。我希望我没有让你们感到困惑。
file >> rows >> columns >> mines;
//declare mine field vector of int
vector<vector<int> > mineField(rows, vector<int> (columns));
//Set's the elements of the .txt matrix to an array
for (int i = 0; i < rows; i++){
for (int j = 0; j < columns; j++){
file_difficulty >> mineField[i][j];
}
}
minesweeper:minesweeper play(columns, rows, mines, mineField);
刚刚意识到 minesweeperBoard 根本没有在构造函数或其他函数中声明。
让我猜猜:你在这个声明中颠倒了 rows
和 columns
的顺序
minesweeper:minesweeper play(columns, rows, mines, mineField);
应该是
minesweeper:minesweeper play(rows, columns, mines, mineField);
这是更大的基本扫雷程序的一部分。在该程序的主 cpp 文件中,我将矩阵的所有值加载到 int 类型的二维向量中。基本上这个矩阵由 1 和 0 填充,它们将用于指示是否有地雷。我已经通过 cout 确认原始向量和引用向量都在输出我加载到它们中的矩阵。
我创建了一个包含 3 个不同条件的结构单元。我创建了一个单元格类型的二维向量,它基本上同时创建了 3 个向量。我无法将引用向量的值 1 和 0 加载到 minesweeperBoard[i][j].isMine.
这是我的代码:
include <iostream>
include <vector>
using namespace std;
struct cell{
int state; //( 0 hidden, 1 revealed, 2 marked)
int value; //(-1 mine, 0 no surrounding, # > 0 number of surrounding mines)
bool isMine;
};
void minesweeper(int row, int col, int numOfMines, vector<vector<int> >&mineField) {
rowNum = row;
colNum = col;
minesNum = numOfMines;
int temp;
for (int i = 0; i < rowNum; i++) {
for (int j = 0; j < colNum; j++) {
temp=mineField[i][j];
if (temp ==0) {
minesweeperBoard[i][j].isMine = false; //will set minesweeper to false if the condition is met
}
else {
minesweeperBoard[i][j].isMine = true; //wil set minesweeper to true if the condition is met
}
}
}
}
程序正在编译,但一旦编译到此点就会抛出错误。我做错了什么,这不是我应该如何将状态转移到 isMine 向量。
在我的main中,我打开文件并读取了几条数据,行,列和地雷数量。然后该文件包含一个由所述行和列组成的巨大矩阵,我将其输入向量。然后我传递向量。请记住,原始的 void 函数实际上是一个 class 成员,因此 main 中的声明类似于它。我希望我没有让你们感到困惑。
file >> rows >> columns >> mines;
//declare mine field vector of int
vector<vector<int> > mineField(rows, vector<int> (columns));
//Set's the elements of the .txt matrix to an array
for (int i = 0; i < rows; i++){
for (int j = 0; j < columns; j++){
file_difficulty >> mineField[i][j];
}
}
minesweeper:minesweeper play(columns, rows, mines, mineField);
刚刚意识到 minesweeperBoard 根本没有在构造函数或其他函数中声明。
让我猜猜:你在这个声明中颠倒了 rows
和 columns
的顺序
minesweeper:minesweeper play(columns, rows, mines, mineField);
应该是
minesweeper:minesweeper play(rows, columns, mines, mineField);