2014-08-31 175 views
0

我在初始化一個空數組,或者所以我叫它,在類中遇到一些麻煩。基本上,我想,以填補0C++ - 初始化一個空的數組類

這裏的二維數組是我的代碼:

Board.cpp

#include "Board.h" 
#include <string> 
#include <iostream> 
#include "Player.h" 

using namespace std; 

Board::Board() 
: _board{ { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 } } 
{ 
} 

void Board::drawBoard() 
{ 
    for (int i = 0; i < 4; i++){ 
     for (int j = 0; j < 4; j++){ 
      if (i == 0 && j == 0){ 
       cout << " "; 
      } 
      else if (i == 0){ 
       cout << " " << j << " "; 
      } 
      else if (j == 0){ 
       cout << i; 
      } 
      else { 
       if (_board[i][j] == 0) 
        cout << "| " << "|"; 
       else 
        cout << "|" << _board[i][j] << "|"; 
      } 
     } 
     cout << endl; 
    } 
} 

void Board::playerInput(char input) 
{ 
} 

這裏是Board.h:

#pragma once 
#include <string> 
#include <iostream> 

class Board 
{ 
public: 
    Board(); 
    void drawBoard(); 
    void playerInput(char input); 


private: 
    char _board[3][3]; 
    char _input; 
}; 

是一個正確的初始化數組的方法?我閱讀了一些文章,但它讓我更加困惑。 對不起,如果我聽起來很愚蠢。但我需要你的幫助。 謝謝。

+0

您有什麼樣的麻煩?請解釋這個問題。 – 0x499602D2 2014-08-31 05:43:46

+0

我得到這個錯誤:「錯誤錯誤C2536:'Board :: Board :: _ board':無法指定數組的顯式初始值設定項\t c:\ users \ rlngstrdrgntr \ documents \ visual studio 2013 \ projects \ project1 \ project1 \ board.cpp Project1 「 – GroniumArgor 2014-08-31 05:46:36

+0

它仍然給我錯誤:」Error:expected a declaration「。 – GroniumArgor 2014-08-31 06:29:42

回答

3

所有你需要做的是值初始化數據成員:

Board::Board() : _board() {} 

這將零初始化的_board所有的元素,也適用於C++ 03。

+0

它的工作原理。非常感謝你的回答。 – GroniumArgor 2014-08-31 12:01:43

0

取決於你的編譯器,你應該能夠做到這一點(注意使用括號,而不是括號):

Board::Board() 
: _board({ 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }) 
{ 
} 

編號:https://stackoverflow.com/a/2409882/1932930

看起來你正在使用VS2013。它看起來像VS2013支持它。參考文獻:http://wiki.apache.org/stdcxx/C%2B%2B0xCompilerSupport

+0

是的,我用vs2013 它給了我4個錯誤:錯誤錯誤C2536:「董事會::董事會:: _板」:對數組 \t 智能感知不能指定顯式的初始化:僅「()」的允許作爲數組成員「Board :: _ board」的初始化程序\t 智能感知:期望a';' \t項目1 智能感知:預計聲明 – GroniumArgor 2014-08-31 06:34:38

1

juanchopanza使用的方法是當前設置的C++ 11 但是,我會建議一些小的更改。如果所有的默認構造函數都在初始化數組,我將在頭文件中初始化它。像這樣

#pragma once 
#include <string> 
#include <iostream> 

class Board 
{ 
public: 
    Board()=default; //becomes compiler constructed 
    void drawBoard(); 
    void playerInput(char input); 


private: 
    char _board[3][3]{};//added {} here 
    char _input; 
}; 

這樣,在構造函數被調用並且構造函數由編譯器生成之前,數組被初始化。 這裏的好處是,你需要的代碼更少,如果你願意,它可以擴展爲額外的構造函數。

例如:

如果添加

委員會(字符輸入)輸入 所有需要的是:

Board(char input) 
{ 
    _input=input;// no need to repeat initialization code for _board array 

} 
+1

+1,這實際上是一個好主意(但我懷疑OP的編譯器支持這一點)。 – juanchopanza 2014-08-31 11:00:32

+0

OP的代碼和juan的代碼都在程序執行過程中的同一位置初始化該數組。 – chris 2014-08-31 11:20:26

+0

謝謝。我會試試看。 – GroniumArgor 2014-08-31 12:02:03