我在头文件中定义了一个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)
首先,赋值和初始化之间存在差异.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)