C++ 访问函数c+中的全局变量+;

C++ 访问函数c+中的全局变量+;,c++,arrays,function,multidimensional-array,C++,Arrays,Function,Multidimensional Array,我有一个非常基本的疑问。从下面的代码中,我将Board[]]声明为一个全局字符数组。我想在名为init\u board()的函数中初始化数组。但是编译器返回 函数void init_board()中的: 应在“{”标记之前使用主表达式 应为“{”标记之前的“ 代码: #包括 #包括 使用名称空间std; //全局变量--------------- 炭板[2][2]; //函数声明---------- void init_board(); 内部主(空) { 初始化电路板(); 对于(int i=0

我有一个非常基本的疑问。从下面的代码中,我将Board[]]声明为一个全局字符数组。我想在名为
init\u board()
的函数中初始化数组。但是编译器返回

函数void init_board()中的

应在“{”标记之前使用主表达式

应为“{”标记之前的“

代码:

#包括
#包括
使用名称空间std;
//全局变量---------------
炭板[2][2];
//函数声明----------
void init_board();
内部主(空)
{
初始化电路板();

对于(int i=0;i,只能在声明数组时使用初始值设定项语法,即

char board[2][2] = {{'a', 'b'}, {'c', 'd'}};

在所有其他情况下,您需要浏览数组元素并对其进行设置。

您正在索引init_Board()中的Board[2][2]您正在索引超出指定大小的数组,即您已指定数组为2行2列,但您正在索引到元素3中(在C/C++和其他一些语言中,索引从0开始)。 您可以在编译时在声明数组的文件顶部初始化该数组:

char Board[2][2] = {{'a','b'},{'c','d'}}; 
或者,您可以按照其他人的建议单独初始化每个元素

void init_board()
{
Board = {{'a','b'},{'c','d'}};
}
那会解决的。。。 当你使用
Board[2][2]您只引用了[2][2]位置的一个字符。因此,这意味着您将只向Board的一个部分添加a、b、c和d

这与全局变量无关。它与初始值设定项有关。
Board[2][2]
超出范围。由于
Board
有两行两列,只有
0
1
是合法的行/列值。@DavidSchwartz我看不到我在射程之外的位置…我在
Board[2][2]中有两个元素在两行中={'a','b'},{'c','d'};
正确,因此有效条目是
Board[0][0]
板[0][1]
板[1][[0]
,和
板[1][1]
——这就是四,二乘二。您的代码试图给
板[2][2]
赋值(因为这是
=
左侧的内容),但没有
板[2][2]
。(即使有,也应该是一个字符,而不是数组。
棋盘就是数组。)我想你是在想象,等号右边有一个数组的事实会让左边的东西变成一个数组。但这不是
=
的工作原理。
棋盘[0][0]='a';
就可以了。
板[0][0]
是数组中的一个字符条目,
'a'
是它可以接受的值之一。
void init_board()
{
Board = {{'a','b'},{'c','d'}};
}