为什么全局变量对我不起作用?

How come global variables isn't working for me?

本文关键字:不起作用 全局变量 为什么      更新时间:2023-10-16

在grid.h中,我有

#ifndef __GRID_H__
#define __GRID_H__
#include "block.h"
extern char **theBoard;
extern Block* blocks[40];
#endif

在我的"board.h"文件中,我有(缩写)

#include "block.h"
class Board
{
    ....
    char **theBoard;
    Block* blocks[40];
    ....
}

在我的"board.cpp"文件中,我已经初始化了board和blocks(缩写)

#include "board.h"
#include "grid.h"
theBoard = new char*[18];
for(int i=0; i<18; i++){
    theBoard[i] = new char[10];
    for(int j=0; j<10; j++){
        theBoard[i][j] = ' ';
    }
}
for (int i = 0; i < 40; i++)
    blocks[i] = 0;

在我的"block.h"文件中我有(缩写)

class Block
{
    ....
    char **theBoard;
    Block* blocks[40];
    ....
}

在我的"块"中。cc"文件,我有(缩写)

#include "grid.h"
#include "block.h"
//somewhere in the file I try to read theBoard[1][1]

我的程序在试图读取block.cc中的board[1][1]时崩溃了。在电路板上放置调试器的监视窗口表明,当程序在block.cc

中运行指令时,它指向垃圾。

代码是这样的,因为我试图遵循其他人在这里发布的类似问题中给出的相同问题的答案中给出的说明。

我试图使用在grid.h中声明的全局变量在每个文件,包括grid.h。

谁能告诉我在哪里我犯了一个错误在使用全局变量?

谢谢

在全局范围内声明变量并不会神奇地促进该标识符的所有其他使用来访问全局变量。相反,对其他范围内的变量使用相同的名称将会隐藏全局变量。(仍然可以通过限定名访问)

在你的程序中,你同时声明了::theBoard(一个全局变量)和Block::theBoard(一个class Block的非静态成员变量)。::blocksBlock::blocks也一样。

class Block及其成员函数内部,不限定使用theBoardblocks将引用成员。在外部,不合格的用法将指向全局。

一个全局变量声明(使用extern)也需要一个匹配的定义,它必须在全局范围内,在一个编译单元中(不要把定义放在头文件中)。这就是链接器为变量分配内存的原因。