为什么全局变量对我不起作用?
How come global variables isn't working for me?
在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
的非静态成员变量)。::blocks
和Block::blocks
也一样。
在class Block
及其成员函数内部,不限定使用theBoard
和blocks
将引用成员。在外部,不合格的用法将指向全局。
一个全局变量声明(使用extern
)也需要一个匹配的定义,它必须在全局范围内,在一个编译单元中(不要把定义放在头文件中)。这就是链接器为变量分配内存的原因。
相关文章:
- 通过 get-Method 访问变量在类外不起作用
- 键盘不起作用 - Arduino Uno - 与变量有关的多个错误
- (C++)虽然循环一次不起作用,但我引入了多个变量
- 指针变量在 cout 函数中不起作用
- C++结构模板变量快捷方式定义不起作用
- C++ 互斥锁可以交叉方法/变量吗?如果是这样,为什么在这里不起作用?
- 变量和常数的C++划分不起作用
- C++ Eclipse:二叉搜索树节点>数据=变量似乎不起作用
- swap(int&, int&) 函数不起作用,当交换不使用临时变量时?
- 运算符的全局过载<<不起作用,为什么?
- 为什么变量算术不起作用?
- For 和 while 循环在全局定义的函数中不起作用
- 为什么这个条件变量不起作用
- 在循环中更改数组的变量不起作用
- 使用模量来找出数字是否可以除去不起作用的变量
- 添加到私人变量不起作用
- 更改生成文件中变量的值不起作用
- 需要使用 Book* 头变量重载运算符,但不起作用
- SFINAE:检测成员变量的存在在 g++ 上不起作用
- 为什么全局变量对我不起作用?