基本上我想使用传递给我的班级的大小变量创建一个多维数组,但不知道该怎么做。
我试过做
//Class header
Tile * gameTile;
//Class cpp
gameTile = new Tile[size][size];
它不介意new Tile[size]
但不是[size][size]
。为什么是这样?
基本上我想使用传递给我的班级的大小变量创建一个多维数组,但不知道该怎么做。
我试过做
//Class header
Tile * gameTile;
//Class cpp
gameTile = new Tile[size][size];
它不介意new Tile[size]
但不是[size][size]
。为什么是这样?
这失败了,因为只有分配数组的第一个维度可能具有动态大小。为了克服这个限制,您可以使用二维向量:
std::vector<std::vector<Tile> > gameTile(size, std::vector<Tile>(size));
就像在 Vlad 提到的链接中一样,您可以使用向量,或者为了更快的速度,您可以使用以下代码来初始化双向数组:
int i;
int ** intTile;
intTile = new int*[5];
for (i = 0; i < 5; i++) {
intTile[i] = new int[5];
}
尽管您想使用二维数组,但为了完整性,我只想指出您也可以使用一维数组来实现您的目的。如果它的尺寸按尺寸排列,则您有:
gameTile = new Tile[size*size];
//now gameTile[y][x] becomes:
Tile t = gameTile[x + y*size];
//if array is not square
gameTile = new Tile[width*height];
//now gameTile[y][x] becomes:
Tile t = gameTile[x + y*width];
你可以做
Tile *gameTile = &((new Tile[size][size])[0][0]);
这会将多维数组中第一个元素的地址存储到gameTile。