我在头文件中定义了一个2D数组
char map[3][3];
如何初始化类构造函数中的值,如此
map = {{'x', 'x', 'o'},
{'o', 'o', 'x'},
{'x', 'o', 'x'}};
答案 0 :(得分:5)
首先,赋值和初始化之间存在差异。 OP标题是关于初始化的。
其次,您没有告诉我们您的2D数组是类成员(静态/非静态)还是命名空间变量。
- 由于你提到在类构造函数中初始化它,我假设它是一个类非静态成员,因为:
$ 12.6.2 / 2 - “除非 mem-initializer-id命名 构造函数的类,非静态数据 构造函数类的成员,或 直接或虚拟的基础 class,mem-initializer是 病态的“。
此外,从C ++ 03开始,成员数组无法在OP的情况下在构造函数初始化列表中初始化(不确定C ++ 0x)。
- 如果你的2D数组是你的类的静态成员,你应该像你一样初始化它(略有改变),但不是在构造函数中。这应该在封闭的命名空间范围内完成一次,并且只能在任何翻译单元中完成一次。
char (A::map)[3][3] = {{'x', 'x', 'o'},
{'o', 'o', 'x'},
{'x', 'o', 'x'}};
- 或者,如果您的2D数组是命名空间范围变量,则应该从头文件中取出数组的定义(除非它也是静态的),因为它将导致重新定义错误并被定义和初始化一次,只有一次在任何翻译单位
char map[3][3] = {{'x', 'x', 'o'},
{'o', 'o', 'x'},
{'x', 'o', 'x'}};
答案 1 :(得分:1)
memcpy(map,"xxoooxxox",9);
或
char tmp[3][3] =
{{'x','x','o'},
{'o','o','x'},
{'x','o','x'}};
memcpy(map,tmp,9);