最近在用C++做一个象棋小游戏,为了规避全局变量的使用,想使用结构体来声明需要使用的数据。给其中用来存储棋盘信息的二维数组赋值时却遇到了问题:
在结构体内是不能进行数据初始化的,而在函数中(假设我定义了一个结构体d),也不能使用d.map[2][3] = {{,,,},{,,,}};这样的方法给结构体内的数组赋值,因为编译器会报这样的错误:错误error C2440: “=”: 无法从“initializer-list”转换为“int” 。
所以就得另想办法给这个数组赋值了。我最后使用了个笨办法:用循环来完成的:先在函数中定义并初始化另一个和你需要使用的数组同行同列的数组,之后使用循环将新定义的数组的值依次赋值给结构体内的数组。
用这种方法可以较方便的给结构体内的数组赋值,而不是使用d.map[0][0] = …;这种方法一个一个的赋值(我差点就这样做了)。下面是我使用到的函数代码:
void Mouse::InitMap() {
struct Data d;
int mapdata[10][9] =
{ { 'C', 'H', 'E', 'M', 'B', 'M', 'E', 'H', 'C' },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 'G', 0, 0, 0, 0, 0, 'G', 0 },
{ 'P', 0, 'P', 0, 'P', 0, 'P', 0, 'P' },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 'p', 0, 'p', 0, 'p', 0, 'p', 0, 'p' },
{ 0, 'g', 0, 0, 0, 0, 0, 'g', 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 'c', 'h', 'e', 'm', 'b', 'm', 'e', 'h', 'c' } };
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 9; j++) {
d.map[i][j] = mapdata[i][j];
}
}
PutChess(d);
}
希望对遇到类似问题的同学能有所帮助。也祝自己赶快完成这个小项目。