2016-05-14 93 views
-1

這是一個較大的基本掃雷程序的一部分。在這個程序的主要cpp文件中,我將一個矩陣的所有值加載到int類型的2d向量中。基本上這個矩陣是用1和0填充的,它將用來表示礦山是否在那裏。我已經通過cout確認了原始矢量和參考矢量都輸出了我裝入它們的矩陣。C++中的2D矢量問題

我已經創建了一個包含3個不同條件的struct cell,我可以創建一個類型cell的2d向量,它基本上可以同時創建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向量。

在我的主體中,我打開文件並讀取數據,行,列和數量的地雷。然後該文件包含一個巨大的行和列的矩陣,我將其饋入向量中。然後我通過矢量。請記住,最初的void函數實際上是一個類成員,因此主要類似於這個聲明。我希望我不會讓你們感到困惑。

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在構造函數或其他函數中都沒有聲明。

+0

是什麼'minesweeperBoard'和你在哪裏申報/初始化呢? – user463035818

+1

還有更多的錯誤,不會讓這段代碼編譯。請提供[mcve](http://stackoverflow.com/help/mcve) – user463035818

+0

對不起,上面的代碼只是項目的一個片段。掃雷艇實際上是一個班級,這是其中的一個功能。 minesweeperBoard是一個私人成員,被宣佈爲矢量> minesweeperBoard; –

回答

0

讓我猜:你倒的rowscolumns順序在此聲明

minesweeper:minesweeper play(columns, rows, mines, mineField); 

,並應

minesweeper:minesweeper play(rows, columns, mines, mineField);