Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在构造函数中初始化二维数组_C++ - Fatal编程技术网

C++ 在构造函数中初始化二维数组

C++ 在构造函数中初始化二维数组,c++,C++,长话短说,我试图在构造函数中将2D数组的所有值初始化为空格。我知道我可以创建一个for循环来填充数组,但我想知道你是否可以使用指针或引用来填充它,这是我认为你必须要做的,但我目前还不知道该怎么做 class TicTacToe { // state of the game char M[3][3]; int numRemainingChoices; // number of remaining choices char turn; // to determine whose turn it i

长话短说,我试图在构造函数中将2D数组的所有值初始化为空格。我知道我可以创建一个for循环来填充数组,但我想知道你是否可以使用指针或引用来填充它,这是我认为你必须要做的,但我目前还不知道该怎么做

class TicTacToe {

// state of the game
char M[3][3];
int numRemainingChoices; // number of remaining choices
char turn; // to determine whose turn it is

public:

TicTacToe(char array[][3]) {
// initializes each cell of M to a blank, sets turn to X, and 
numRemainingChoices to 9
M[][] = {{" ", " ", " "}, {" ", " ", " "}, {" ", " ", " "}};
turn = 'x';
numRemainingChoices = 9;
// Then calls runTicTacToe()
runTicTacToe();
}
具体来说,我想用“”填充2D数组M,但我需要在构造函数中这样做。我尝试添加2D数组作为参数,然后像在代码中一样填充它。当我尝试这样做时,我得到一个错误:“标量初始值设定项中的元素过多”。我不完全理解这是否只是创建数组的一个副本并填充它,或者它是否会用空格填充原始数组。如果有人能向我澄清和解释幕后发生的事情,那将是一个很大的帮助。

首先是
是一个字符串(实际上可以看作
char const*
),您有
char
数组

若要继续,则不能将数组赋值给一个数组,因为这不是初始化数组的方式

而是使用构造函数初始值设定项列表,如


正如注释所指出的,不要在构造函数中“运行”任何东西。构造函数只应初始化新对象的状态。如果要“运行”任何内容,请在构建对象后执行此操作:

TicTacToe gameObject;  // Create and initialize the object
gameObject.run();  // Start the game

在C++11中,使用扩展的initlialiser列表。但是为什么要使用原始数组而不是容器呢?标准容器更容易初始化。当他说“尽可能少”时,他最肯定的意思是不要
runTicTacToe()@user4581301确实是这样<代码>“
本质上不是一个
字符*
”。它是字符串文字,表示为以零结尾的数组。数组不是指针。@Peter,但作为数组,它自然会衰减为指向其第一个元素的指针。重新编写以使其更清楚。
TicTacToe gameObject;  // Create and initialize the object
gameObject.run();  // Start the game