为什么我无法在全局范围内访问我的数组下标
Why can't I access my array subscript in global scope
如果我在函数中有以下代码,我不会得到错误,我可以编译没有问题,但是,一旦我把它放在全局范围内,我会收到一个错误"无法分配大小为零的数组",以及其他几个错误。为什么会发生这种情况以及如何摆脱错误。我知道全局变量的风险,这只是一个简单的测试用例。
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,全局范围只允许你放置define
并declaration
它。而intest[0] = new int;
是 c/c++ 编译器在编译时应失败的赋值。
相关文章:
- 我的简单if-else语句是如何无法访问的代码
- 为什么我的好友类无法访问私人会员?
- 为什么我的 setter 方法会产生错误的访问错误
- 如何为我的容器实现随机访问迭代器?
- 访问我以前可以访问的功能时出现分段错误
- 为什么访问我的引用捕获变量会导致我的 lambda 函数出现段错误?
- 在不同条件下无法访问我的向量变量
- 如何在OMNet++中访问我的模拟的不同节点
- 如何使用Visual Studio CppunittestFramework访问我的代码
- 如何使用QT/C 中的多线程用API访问我的数据库
- CMake没有创建可以访问我的共享库的可执行文件
- 我无法使用C++访问我的类的属性
- 如何访问我的子类?C++
- C++在另一个头文件和cpp中访问我的矢量
- 为什么我无法访问我的成员变量
- 为什么我无法在全局范围内访问我的数组下标
- 无法访问我的网络摄像头opencv ubuntu
- 为什么我不能在c++中访问我的私有变量和getter和setter消息
- 如何在使用QQmlApplicationEngine时从C++访问我的Window对象属性
- Eclipse - 无法访问我的文件夹中的 cpp 文件