【问题标题】:Accessing Global Variable in function c++在函数 C++ 中访问全局变量
【发布时间】:2012-10-13 03:55:24
【问题描述】:

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

In function void init_board():
expected primary-expression before '{' token
expected ;' before '{' token

代码:

#include <iostream>
#include <conio.h>

using namespace std;

//global variables---------------
char Board[2][2];

//function declarations----------
void init_board();

int main(void)
{
init_board();

 for(int i=0;i<2;i++)
 { 
 for(int j=0;j<2;j++)
 {
  cout<<Board[i][j]<<" ";
 }
  cout<<"\n";
 }

getch();
}

void init_board()
{
Board[2][2] = {{'a','b'},{'c','d'}}; 
}

我犯的基本错误是什么...请指出!!

谢谢

【问题讨论】:

  • 这与全局无关。它与初始化程序有关。
  • Board[2][2] 超出范围。由于Board 有两行两列,因此只有01 是合法的行/列值。
  • @DavidSchwartz 我看不到我在射击范围内的位置...我在Board[2][2] = {{'a','b'},{'c','d'}}; 中有 2 行中的 2 个元素
  • 对,所以有效的条目是 Board[0][0]Board[0][1]Board[1][[0]Board[1][1]——这就是四个,两个两个。您的代码尝试为Board[2][2] 赋值(因为这是= 左侧的值)——但没有Board[2][2]。 (即使有,它也将是单个字符,而不是数组。Board 是数组。)我想你在某种程度上想象等号右侧有一个数组的事实会以某种方式将左侧的东西变成一个数组。但这不是= 的工作方式。
  • 例如,Board[0][0] = 'a'; 就可以了。 Board[0][0] 是数组中的一个字符条目,'a' 是它可以采用的值之一。

标签: c++ arrays function multidimensional-array


【解决方案1】:

初始化语法只能在声明数组时使用,即

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

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

【讨论】:

    【解决方案2】:

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

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

    或者您可以按照其他人的建议单独初始化每个元素。

    【讨论】:

      【解决方案3】:
      void init_board()
      {
      Board = {{'a','b'},{'c','d'}};
      }
      

      那会修复它... 当你使用 Board[2][2] 您只引用位置 [2][2] 中的一个字符。所以这意味着您将只在董事会的一小部分中添加 a、b、c 和 d

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-31
        • 1970-01-01
        • 1970-01-01
        • 2013-03-19
        • 1970-01-01
        • 1970-01-01
        • 2021-11-24
        相关资源
        最近更新 更多