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

时间:2014-05-20 04:34:39

标签: 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; 
}

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

那么问题是什么?

1 个答案:

答案 0 :(得分:10)

您只能使用常量大小声明array,这可以在编译时推断出来。 zo1zo2zoA是变量,值只能在运行时知道。

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

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


delete[] zod1;

但是你也可以在这里使用vector代替arrayvector将负责堆上的分配。

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