可变大小的对象不能被初始化c++

vaj7vani  于 2022-12-15  发布在  其他
关注(0)|答案(2)|浏览(168)

我知道以前有人问过这个问题,但我不明白为什么它对我不起作用

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; 
}

zod1、zod2和zoA的所有3个都给我错误:variable-sized object may not be initialized c++但是编译器应该在初始化之前知道zo的含义,从而使cout<<zo1;工作并打印出含义
那么问题是什么呢?

wgx48brx

wgx48brx1#

您只能使用 constant size声明array,它可以在编译时推导出来。zo1zo2zoA是变量,其值只能在运行时知道。
详细地说,当你在堆栈上分配内存时,大小必须在编译时知道。因为数组是方法的本地数组,它们将被放置在堆栈上。你可以使用常量值,或者使用newheap 中分配内存,并在使用delete完成后释放内存,如

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

delete[] zod1;

但是在这里也可以使用vector代替arrayvector将负责堆上的分配。
顺便说一句,你不应该通过传值来传递vector,因为整个向量将被复制并作为参数传递,并且在调用者端看不到任何变化。

zphenhs4

zphenhs42#

这里是修复,你可以写下面的行,而不是你得到错误的行;

备选方案1您可以使用载体:

vector<int> zod1(zo1, 0);

备选2(例如,由于w知道“0〈= s.length〈= 100”,我们可以使用常数值):

int zod1[100] = { 0 };

相关问题