在C ++中用类构造函数初始化2D数组

时间:2010-10-07 04:27:34

标签: c++ arrays

我在头文件中定义了一个2D数组

char map[3][3];

如何初始化类构造函数中的值,如此

 map = {{'x', 'x', 'o'},
       {'o', 'o', 'x'},
       {'x', 'o', 'x'}};

2 个答案:

答案 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);