1

所以我试图通过创建一个基本的国际象棋游戏来学习 C++。用户可以创建非标准尺寸的板(即不一定是 8x8)。

不过,一旦我从用户那里收到了电路板的尺寸,我应该设置为以固定尺寸创建它。所以我想在这里使用一个数组。

编译器不喜欢我的声明:

 tile arrayOfTiles[numX][numY];

它似乎告诉我它想要一个常量作为数组索引。这是我什至可以用数组做的事情吗?

class gameBoard{
    public:
    gameBoard(int x=8, int y=8)
    :   numX(x),
        numY(y)
{
    //construct board
    tile arrayOfTiles[numX][numY];

    /*
    for (int i=0; i<numX; i++) {
        for (int j=0; j<numY; j++){
            arrayOfTiles[i][j]=tile();
            }
        }
    */
}

protected:
    int numX;  //total number of rows, typically 8 (A-H) on a chessboard
    int numY;  //total number of columns, typically 8 (1-8) on a chessboard

};
4

2 回答 2

4

使用std::vector

std::vector<std::vector<tile>> arrayOfTiles(numX, std::vector<tile>(numY));

typedef它来简化它:

typedef std::vector<tile>  vectiles;

std::vector<vectiles> arrayOfTiles(numX, vectiles(numY));

vectiles是 tile 的向量,并且arrayOfTiles是 的向量vectiles。您可以将其视为二维数组。

for(size_t i = 0 ; i < numX; ++i)
{
     for(size_t j = 0 ; j < numY; ++j)
         //use arrayOfTiles[i][j]
}

代替numXand numY,您可以分别使用arrayOfTiles.size()and arrayOfTiles[i].size()

于 2013-02-24T18:43:26.083 回答
0

您可以在这里做的最好的事情是让gameBoard内部arrayOfTiles作为其数据成员之一,而不是 C 样式的数组,您应该std::vector改用:

protected:
    std::vector< std::vector<tile> > arrayOfTiles;

然后你可以在你的初始化列表中初始化它:

public:
    gameBoard(int x = 8, int y = 8)
    : numX(x), numY(y), arrayOfTiles(x, std::vector<tile>(y));
    {
        // ...
    }
于 2013-02-24T18:47:12.887 回答