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

Ari*_*911 3 c++ arrays

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

char map[3][3];
Run Code Online (Sandbox Code Playgroud)

如何在类构造函数中初始化值,如下所示

 map = {{'x', 'x', 'o'},
       {'o', 'o', 'x'},
       {'x', 'o', 'x'}};
Run Code Online (Sandbox Code Playgroud)

Chu*_*dad 5

首先,赋值和初始化之间存在差异.OP标题是关于初始化的.

其次,您没有告诉我们您的2D数组是类成员(静态/非静态)还是命名空间变量.

- 既然你提到在类构造函数中初始化它,我假设它是一个类非静态成员,因为:

$ 12.6.2/2 - "除非mem-initializer-id命名构造函数的类,构造函数类的非静态数据成员,或者该类的直接或虚拟基础,否则mem-initializer是不正确的."

此外,从C++ 03开始,成员数组不能在OP的情况下在构造函数初始化列表中初始化(不确定C++ 0x).

- 如果你的2D数组是你的类的静态成员,你应该像你一样初始化它(略有改变),但不是在构造函数中.这应该在封闭的命名空间范围内完成一次,并且只能在任何翻译单元中完成一次.

char (A::map)[3][3] = {{'x', 'x', 'o'}, 
       {'o', 'o', 'x'}, 
       {'x', 'o', 'x'}};
Run Code Online (Sandbox Code Playgroud)

- 或者,如果您的2D数组是命名空间范围变量,则应该从头文件中取出数组的定义(除非它也是静态的),因为它将导致重新定义错误并且只能定义和初始化一次.任何翻译单位

char map[3][3] = {{'x', 'x', 'o'}, 
       {'o', 'o', 'x'}, 
       {'x', 'o', 'x'}}; 
Run Code Online (Sandbox Code Playgroud)