不能用变量设置可变长度
Can't set variable length with variable
我现在要做的是创建一个长度由变量定义的数组。 但是,当我将变量放入数组长度时,它会给我一个"非 POD 元素类型'glm::vec2'的可变长度数组"错误。 但是,如果我用实际数字替换变量,错误就会消失。 为什么会发生这种情况,我该如何解决这个问题?
int numtriangles = sector1.numtriangles;
glm::vec2 tex[test]; //Using a variable generates an error
glm::vec3 vertices[10]; //No error here
标准C++中不能有可变长度数组 (VLA)。
C++标准不允许使用可变长度数组。C++数组的长度需要是一个编译时常量。某些编译器确实支持 VLA 作为编译器扩展,但使用它们会使代码无法跨其他编译器移植。
您可以使用std::vector
代替 VLA。
看到这个问题 有没有办法用非常量变量初始化数组?(C++)
简短的回答是否定的,你不能直接这样做。但是,您可以通过类似的东西获得相同的效果
int arraySize = 10;
int * myArray = new int[arraySize];
现在myArray
是指向数组的指针,您可以像myArray[0]
等数组一样访问它。
您还可以使用一个向量,这将允许您拥有一个可变长度数组。我的示例允许您使用变量初始化器创建一个数组,但是在我的示例中myArray
数组只有 10 个项目的长度。如果您不确定数组将持续多长时间,请使用向量,您可以从中推开和弹出项目。
还要记住我的例子,由于你已经分配了内存,当你完成数组时,你需要通过执行类似的事情来释放该内存。
delete[] myArray;
这里有一个小示例应用程序来说明这一点
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int arraySize = 10;
int * myArray = new int[arraySize];
myArray[0] = 1;
cout << myArray[0] << endl;
delete[] myArray;
}
使用 STL。如果你想要一个可变长度的数组,你可以在#include<vector>
下使用向量
本机 c++ 数组不中殿可变长度数组。
声明具有长度说明符的数组时,只允许使用常量。
实际上,当编译程序时,会评估数组长度。
但请注意,C++声明int test[];
是非法的,因为编译器无法知道为变量分配多少空间。
如果没有长度说明符,就没有为数组保留的实际内存,您必须求助于使用指针和动态内存分配:
int * test = new int[12];
// or
int * test = new int[val]; // variable works here
// and don't forget to free it
delete [] test;
使用 int test[12]
实际上会创建一个数组,该数组在编译时一劳永逸地静态初始化,以包含 12 个整数。永远不要尝试使用以这种方式声明的变量来执行delete [] test
,因为它肯定会使您的程序崩溃。
堆栈上的空间,如果在全局上下文中声明,则将使用程序数据存储器。
>C++不支持声明可变长度数组。因此,要使用具有长度的数组,您可以
-
假设一个大数字,它是数组中可能的最高长度。现在声明一个该大小的数组。并通过假设它是您想要的长度数组来使用它。
#define MAX_LENGTH 1000000000 glm::vec2 tex[MAX_LENGTH];
来迭代它
for(i=0; i<test; i++) { tex[i]; }
注意:在此方法中,内存使用不会最小化。
-
使用指针并根据您的长度分配它。
glm::vec2 *tex; tex = new glm::vec2[test];
在此处输入代码
for(i=0; i<test; i++) { tex[i]; } delete [] tex; // deallocation
注意:两次释放内存都会出错。
-
使用其他行为类似于数组的数据结构。
vector<glm::vec2> tex; for(i=0; i<test; i++){ tex.push_back(input_item); } /* test.size() return the current length */
- 设置变量时C++程序挂起
- 从系统("command") (C++) 设置变量
- 在构造函数中设置变量失败?
- 如何为输入设置变量编号和__android_log_print格式
- 从输入文件 c++ 中提取和设置变量
- 使用 void 函数在主函数中设置变量的值
- 未在另一个函数中设置变量引用的问题
- 对于循环设置变量为条件
- 使用 argv 设置变量
- 为什么我的代码未设置变量
- 在C++中设置变量的值之前检查变量是否更好
- 在 if 语句中设置变量
- 在子类中设置变量
- 未设置变量并返回异常数字
- 如何设置变量的 char 数组的元素数量
- C++指针运行时错误 - 使用指针设置变量然后检索
- 从C++设置变量时 QML 内存泄漏
- 使用此功能在构造函数中设置变量
- 从函数设置变量时不会更改
- 类中的二传手不会设置变量