2016-05-14 7 views
-1

これはより大きな基本的な掃海艇プログラムの一部です。このプログラムのメインのcppファイルでは、行列のすべての値をint型の2次元ベクトルにロードしています。基本的には、この行列には1と0が入っています。これは、鉱山があるかどうかを示すために使用されます。私は元のベクトルと参照ベクトルの両方がそれらに読み込まれた行列を出力していることを確認しました。C++における2Dベクトルの問題

3つのさまざまな条件を含む構造体セルを作成しました。基本的に3つのベクトルを同時に作成するタイプの2次元ベクトルを作成しました。私は参照されたベクトルの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

申し訳ありませんが、上記のコードはプロジェクトのスニペットです。 minesweeperは実際にはクラスであり、これは関数の1つです。 minesweeperBoardはプライベートメンバであり、ベクトル> minesweeperBoardとして宣言されています。 –

答えて

0

私は推測してみましょう:あなたは

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

この宣言にrowscolumnsの順序を反転しており、

minesweeper:minesweeper play(rows, columns, mines, mineField); 
関連する問題