ISO C ++禁止变长数组'up'[-Wvla] |
这个代码发生了这个错误。这个关于store.it的账单生成器的代码获取100个项目的单位价格和数量并返回子总数并且必须手动输入折扣。我在函数中使用数组来编写这个程序。但最终发生了这个错误。
#include <iostream>
using namespace std;
int myVar=100;
void myinput (int up[],int qty[], int dr[]){
cout<<"******************The Bill******************"<<endl;
for (int i=0;i<myVar;i++)
{
cout<<"____________________________________________"<<endl;
cout<<"\nInput UNIT PRICE of the *"<<(i+1)<<"* item :";
cin>>up[i];
cout<<"Input QUANTITY of the *"<<(i+1)<<"* item :";
cin>>qty[i];
cout<<"Input DISCOUNT RATE of the *"<<(i+1)<<"* item :";
cin>>dr[i];
cout<<"____________________________________________"<<endl;
cout<<""<<endl;
}
}
void mytot(int up[],int qty[], int tot[]){
for (int t=0;t<myVar;t++)
{
tot[t]=up[t]*qty[t];
}
}
void mydis(int tot[],int dr[], int dis[]){
for (int a=0;a<myVar;a++)
{
dis[a]=tot[a]*dr[a]/100.0;
}
}
void myst(int subtot[],int tot[],int dis[]){
for(int g=0;g<myVar;g++)
{
subtot[g]=tot[g]-dis[g];
}
}
int mygt(int subtot[]){
int gtot=0;
for(int g=0;g<myVar;g++)
{
gtot=gtot+subtot[g];
}
return gtot;
}
void myout(int subtot[],int gtot){
for(int o=0;o<myVar;o++)
{ cout<<"____________________________________________"<<endl;
cout<<"ITEM "<<o+1<<" SUB TOTAL IS - "<<subtot[o]<<" "<<endl;
}
cout<<"____________________________________________"<<endl;
cout<<"GRAND TOTAL IS * "<<gtot<<"*";
cout<<"\n============================================"<<endl;
}
int main(){
int up[myVar];
int qty[myVar];
int dr[myVar];
int dis[myVar];
int tot[myVar];
int subtot[myVar];
int gtot=0;
myinput(up,qty,dr);
mytot(up,qty,tot);
mydis(tot,dr,dis);
myst(subtot,tot,dis);
gtot= mygt(subtot);
myout(subtot,gtot);
cout<<"\n\n******************Thank You,Come Again******************"<<endl;
}
任何人都可以解决这个问题吗?
答案 0 :(得分:0)
问题是myVar
是一个非常量变量,并且您无法在堆栈上定义具有非常量长度的数组。一些解决方案是:
myVar
声明为const int myVar = 100;
以使其成为常量,这适合您的代码示例。int *up = new int[myVar];
。std::vector
代替数组。 vector<int> up = new vector<int>(myVar)
。