2016-05-14 11 views
-1

Dies ist Teil eines größeren grundlegenden Minesweeper-Programms. In der Haupt-cpp-Datei dieses Programms lade ich alle Werte einer Matrix in einen 2d-Vektor vom Typ int. Im Grunde ist diese Matrix mit 1en und 0en gefüllt, die verwendet werden, um anzuzeigen, ob eine Mine da ist oder nicht. Ich habe durch couts bestätigt, dass sowohl der ursprüngliche Vektor als auch der referenzierte Vektor die Matrizen ausgeben, die ich in sie geladen habe.2D-Vektorausgabe in C++

Ich habe eine Struktur Zelle, die 3 verschiedene Bedingungen enthält, die es sein kann. Ich habe einen 2d Vektor des Typs Zelle erstellt, die im Grunde 3 Vektoren gleichzeitig erstellt. Ich habe Probleme beim Laden der Werte des referenzierten Vektors von 1 und 0 in minesweeperBoard [i] [j] .isMine.

Hier ist mein Code:

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 
      } 
     } 
    } 
} 

Das Programm kompiliert wird, sondern wirft einen Fehler, wenn sie diesen Punkt erreicht. Was ich falsch mache ist, dass ich die Zustände nicht auf den isMine-Vektor übertrage.

In meiner Hauptsache öffne ich die Datei und lese mehrere Daten, die Zeilen, Spalten und die Anzahl der Minen. Dann enthält die Datei eine riesige Matrix der Zeilen und Spalten, die ich in den Vektor füttere. Ich gebe dann den Vektor weiter. Denken Sie daran, dass die ursprüngliche void-Funktion tatsächlich ein Klassenmitglied ist, daher ähnelt die Erklärung im Wesentlichen dieser. Ich hoffe, ich verwirre euch nicht.

Nur festgestellt, dass MinesweeperBoard weder im Konstruktor noch in der anderen Funktion deklariert ist.

+0

sein, was umgekehrt haben 'minesweeperBoard' und wo es Sie declare/initialisieren? – user463035818

+1

Es gibt mehr Fehler, die diesen Code nicht kompilieren lassen. Bitte geben Sie eine [mcve] (http://stackoverflow.com/help/mcve) – user463035818

+0

Entschuldigung, der obige Code ist nur ein Ausschnitt des Projekts. Minesweeper ist eigentlich eine Klasse und das ist eine der Funktionen. minesweeperBoard ist ein privates Mitglied und wird als Vektor deklariert > minesweeperBoard; –

Antwort

0

Lassen Sie mich raten: Sie die Reihenfolge der rows und columns in dieser Erklärung

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

und sollte

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