可变大小的对象可能无法初始化c ++

use*_*621 5 c++

我知道之前曾问过这个问题,但我不明白为什么它在我的情况下不起作用

void calc(vector<char> zodis1, vector<char> zodis2, vector<char> zodisAts,int zo1,int zo2,int zoA)
{
   int i,u=0;

   int zod1[zo1]=0;
   int zod2[zo2]=0;
   int zodA[zoA]=0; 
}
Run Code Online (Sandbox Code Playgroud)

zod1,zod2,zoA中的所有3个都给出了错误:variable-sized object may not be initialized c++ 但是编译器应该知道zo 初始化之前的含义是什么cout<<zo1;工作并打印出来的含义

所以有什么问题?

Rak*_*kib 11

您可以声明一个array只有常量的大小,可以在编译时推断出来.zo1,zo2并且zoA是变量,并且只能在运行时知道这些值.

详细说明,当您在堆栈上分配内存时,必须在编译时知道大小.由于数组是方法的本地数组,因此它们将被放置在堆栈中.您可以使用常量值,也可以在堆中使用分配内存new,并在使用时释放delete,例如

int* zod1 = new int[zo1];
//.... other code


delete[] zod1;
Run Code Online (Sandbox Code Playgroud)

但你也可以使用vector而不是在array这里,并将vector负责堆上的分配.

作为旁注,您不应该vector通过值传递,因为整个矢量将被复制并作为参数传递,并且在调用者端不会看到任何更改.请 vector<char>& zodis1改用.

  • 详细说明:变量可以随时更改值,但文件需要知道要分配多少内存.并详细说明向量侧注:这称为"指针",基本上不是复制可能大量的内存,而是"指向"数据; 这样效率更高. (2认同)