2016-09-16 2 views
1

mit C++ 11, ich hatte zunächst einen 2D-Vektor der mit Standardwerten folgende Form:C++ Instanziieren 2D-Vektor innerhalb Struct mit Standardwerten

vector<vector<int>> upper({{1,2,3,4,5,6},{7,8,9,10,11,-1},{12,13,14,15,-1,-1},{16,17,18,-1,-1,-1},{19,20,-1,-1,-1,-1},{21,-1,-1,-1,-1,-1}}); 
vector<vector<int>> lower({{0,0,0,0,0,0},{0,0,0,0,0,-1},{0,0,0,0,-1,-1},{0,0,0,-1,-1,-1},{0,0,-1,-1,-1,-1},{0,-1,-1,-1,-1,-1}}); 

Dies repräsentiert die obere und untere Komponente eines Puzzles I versuche zu lösen. Jetzt möchte ich mein Programm so ändern, dass diese Vektoren innerhalb einer Struktur deklariert werden, aber ich bin mir nicht sicher, wie dies zu tun ist und geben den 2d-Vektoren Standardwerte. Dies ist, was ich im Moment habe:

struct BoardState{ 
vector<int> row; 
vector<vector<int>> upper; 
vector<vector<int>> lower; 

BoardState() : row(6,0), upper(6,row), lower(6,row) {}; 
}; 

Aber es verursacht einen seg Fehler, wenn ich versuche den Zugriff auf, was drin ist, mit:

#include <iostream> 
#include <vector> 
#include <stdlib.h> 

BoardState *board; 
int main(){ 
      using namespace std; 
      ... 
      for(int i=0; i<6; i++){ 
       for(int j=0; j<6; j++){ 
        cout << board->upper[i][j] << " "; 
       } 
       cout << endl; 
      } 

} 

Wie kann ich die Standardwerte zu einem 2D-Vektor geben innen eine Struktur? Vielen Dank.

+0

Mögliches Duplikat von [gcc warning "'wird nach' initialisiert] (http://stackoverflow.com/questions/1564937/gcc-warning-will-be-initialized-after) – ArchbishopOfBanterbury

Antwort

0

Ich bin mir nicht sicher, wie dies zu tun und die 2D-Vektoren Standardwerte geben.

Genau wie außerhalb der struct

#include <vector> 
#include <iostream> 

struct BoardState 
{ 
    std::vector<std::vector<int>> upper{{1,2,3,4,5,6},{7,8,9,10,11,-1}, 
             {12,13,14,15,-1,-1},{16,17,18,-1,-1,-1}, 
             {19,20,-1,-1,-1,-1},{21,-1,-1,-1,-1,-1}}; 
    std::vector<std::vector<int>> lower{{0,0,0,0,0,0},{0,0,0,0,0,-1}, 
             {0,0,0,0,-1,-1},{0,0,0,-1,-1,-1}, 
             {0,0,-1,-1,-1,-1},{0,-1,-1,-1,-1,-1}}; 
    std::vector<int> row; 

    BoardState() 
    { } 
}; 

int main() 
{ 
    BoardState bs; 

    std::cout << bs.upper[3][1] << std::endl; // print 17 
} 

oder

struct BoardState 
{ 
    std::vector<int> row {6, 0}; 
    std::vector<std::vector<int>> upper {6, row}; 
    std::vector<std::vector<int>> lower {6, row}; 

    BoardState() 
    { } 
}; 

(in diesem Fall Druck 0).

Thake in count, dass, wie von ErzbischofOfBanterbury und Petter erklärt, Mitglieder in der Reihenfolge initialisiert werden, in der sie erklärt werden; Wenn Sie also upper und lower mit row initialisieren möchten, müssen Sie vorher row deklarieren.

1

Von gcc warning" 'will be initialized after':

Sicherstellen, dass die Mitglieder in der Initialisiererliste erscheinen in der gleichen Reihenfolge , wie sie in der Klasse erscheinen.

EDIT:

#include <iostream> 
#include <vector> 
using namespace std; 

struct BoardState{ 
vector<int> row; 
vector<vector<int>> upper; 
vector<vector<int>> lower; 
BoardState() : row(6,0), upper(6,row), lower(6,row) {}; 
}; 

int main() { 
    BoardState board; 
    for(int i=0; i<6; i++){ 
     for(int j=0; j<6; j++){ 
      cout << board.upper[i][j] << " "; 
     } 
     cout << endl; 
    } 
} 
+0

Danke, ich habe dieses Problem behoben aber bekomme immer noch einen seg Fehler. – MetalMagnum

+0

Probieren Sie den Code in meiner Bearbeitung - es funktioniert. – Petter