2013-05-17 61 views
5

我使用C++編寫國際象棋遊戲。我想爲類Board創建兩個類屬性:ROWS和COLUMNS。在Java中,我會將它們聲明爲靜態最終的,並且所有內容都將按我的意願工作。我如何在C++中做同樣的聲明?我需要通過其他類中的「Board :: ROWS」和「Board :: COLUMNS」訪問這些屬性。C++ Java靜態最終等價物

我所擁有的是拋出編譯錯誤,因爲ROWS和COLUMNS沒有在m_TileMap的聲明範圍內聲明。如果不使用#define聲明,有沒有一種很好的做法?

class Board { 
    Tile *m_TileMap[ROWS][COLUMNS]; 

public: 
    static const int ROWS = 8; 
    static const int COLUMNS = 8; 

    Board(int m[ROWS][COLUMNS]); 
} 
+0

我建議使用std :: vector 來代替! –

回答

2

行和列

的聲明後,聲明你m_TileMap例如

class Board { 

public: 
    static const int ROWS = 8; 
    static const int COLUMNS = 8; 

    Board(int m[ROWS][COLUMNS]); 

private: 
    Tile *m_TileMap[ROWS][COLUMNS]; 
}; 

原因是因爲在C++中,編譯器不會向前讀取。因此,爲了讓ROWSCOLUMNS在聲明m_TileMap時被編譯器理解,它們需要在之前聲明。

+0

謝謝您的解釋,這很有道理。 –

1

您可以重新排列類成員,使行和列他們使用之前被聲明:

class Board { 
public: 
    static const int ROWS = 8; 
    static const int COLUMNS = 8; 

    Board(int m[ROWS][COLUMNS]); 

private: 
    Tile *m_TileMap[ROWS][COLUMNS]; 
}; 
+0

謝謝!這有效... –

+0

@LucasKreutz - 不客氣。歡迎來到StackOverflow。您可以通過單擊左側的向上三角形來獲得您認爲有用的答案。 (除了檢查標記對您最有用的答案之外,還可以使用此選項。) –

0

您需要聲明類定義中的大小: static const int ROWS = 8; 等

而且別忘了;課後定義!

1

嘗試使用枚舉如下

class Board { 
public: 
    enum {ROWS = 8}; 
    enum {COLUMNS = 8}; 

private: 
    Tile *m_TileMap[ROWS][COLUMNS]; 

public: 
    Board(int m[ROWS][COLUMNS]); 
}; 
1

ROWSCOLUMNS已經當m_TileMap定義解析尚未宣佈。只需將這些定義:

class Board { 
    Tile *m_TileMap[ROWS][COLUMNS]; 

public: 
    static const int ROWS = 8; 
    static const int COLUMNS = 8; 

    Board(int m[ROWS][COLUMNS]); 
}; 

順便說一句,如果你不需要以往採取的ROWSCOLUMNS地址,另一種是使用一個enum,像這樣:

class Board { 
public: 
    enum { ROWS = 8, COLUMNS = 8}; 
    Tile *m_TileMap[ROWS][COLUMNS]; 


    Board(int m[ROWS][COLUMNS]); 
}; 

所有這些已經說過了,如果你只是使用了vector,生活會不會變得如此簡單?

+0

謝謝你的解釋。我會用一個枚舉,我認爲它更好。我使用了一個數組,因爲我認爲使用minimax算法會更容易。 –