2017-10-26 17 views
0

変数をクラスコンストラクタで初期化する必要があります(宣言で初期化するのは当然ですが、実際はそうではありません)。私はループでそれを初期化しようとしたが、私はそれを正しく行う方法を知らない。これをどうすれば解決できますか?ポインタを使うべきですか?クラスコンストラクタのchar行列を初期化する

class Track 
{ 
private: 
    char track[18][19]; 
    /* 

    need to initialize equal to 
    track[18][19] = { 
      "|    |", 
      "|    |", 
      "|    |", 
      "|    |", 
      "|    |", 
      "|    |", 
      "|    |", 
      "|    |", 
      "|    |", 
      "|    |", 
      "|    |", 
      "|    |", 
      "|    |", 
      "|    |", 
      "|    |", 
      "|    |", 
      "|    |", 
      "|    |" 
    };*/ 

public: 

    Track(){ 
     for (int i=0; i<18; i++) 
      for (int j = 1; j < 18; j++) { 
       track[i][j] = ' '; 
      } 

     for (int i = 0; i < 18; i++) { 
      track[i][0] = '|'; 
      track[i][sizeof(track[i])/sizeof(track[i][0])] = '|'; 
     } 
     //how to initialize track? 
    } 

    void Draw() { 
     for (int i = 0; i < 18; i++) { 
      cout << track[i] << endl; 
     } 
    } 
}; 
+1

constroctorsメンバー初期化子リストを使用できます。 – user0042

+2

宣言で初期化するのが悪いのは誰ですか? –

+0

何を試しましたか?コードはどのように見えましたか? – mskfisher

答えて

0

あなたが定数として1819を定義することをお勧めします:

const int LENGTH = 18; 
const int WIDTH = 19; 

また、あなたはあなたのトラックのセクションが正しく印刷されたい場合はNULL終端文字のための十分な余地を持っている必要があるでしょう:あなたのforループとして

char track[LENGTH][WIDTH + 1]; // (leave enough room for a NULL char) 

、あなただけの各トラックのセクションの最後にNULL文字を追加し、WIDTH - 1を使用する必要があります最後の最後の文字のインデックスを計算する代わりに、sizeof()

Track() { 
    for (int i = 0; i < LENGTH; i++) { 
     track[i][0] = '|'; 

     for (int j = 1; j < WIDTH - 1; j++) { 
      track[i][j] = ' '; 
     } 

     track[i][WIDTH - 1] = '|'; 
     track[i][WIDTH] = '\0'; 
    } 
} 
関連する問題