为什么我无法在全局范围内访问我的数组下标

Why can't I access my array subscript in global scope

本文关键字:访问 我的 数组 下标 范围内 全局 为什么      更新时间:2023-10-16

如果我在函数中有以下代码,我不会得到错误,我可以编译没有问题,但是,一旦我把它放在全局范围内,我会收到一个错误"无法分配大小为零的数组",以及其他几个错误。为什么会发生这种情况以及如何摆脱错误。我知道全局变量的风险,这只是一个简单的测试用例。

int* intest[2];
intest[0] = new int;
允许在

全局范围内进行声明,但不允许使用 new 运算符或赋值。因此,您需要全局范围内的 int *intest[2] 声明(并且您的所有代码都会看到它),但C++要求 new 位于主代码的序列中。(可能在应用程序的某种启动功能中)。

编辑:正如@phresnel所指出的,您可以在此范围内使用新运算符,但不能使用赋值(这是不寻常的,但不是非法的)。但是,以下用作启动的新运算符将为您工作:

int *x[2]={new int,new int};

通常,强烈建议不要使用这种全局缓冲区,并且被认为是一种反模式 - 如果您可以避免使用它,则可能应该使用它。

int* intest[2];

但是,在本地范围内放置是有效的:

intest[0] = new int;

莫。

区别在于,上面的是初始语句(创建变量),而下面的是已执行的代码段。

应该"执行"的代码不能在全局范围内调用,例如,不能在全局范围内调用函数。何时调用该函数?

我可以在全局范围内创建我想要的变量数量,但我不能从中运行代码,除了初始化全局变量时调用的构造函数。

如果要执行诸如 :

intest[0] = new int;

您必须通过 main 或其他函数执行它,否则程序将不知道何时执行它。

AFAIK,全局范围只允许你放置definedeclaration它。而intest[0] = new int;是 c/c++ 编译器在编译时应失败的赋值。