ISO C ++禁止在我的代码中使用可变长度数组'up'[-Wvla]

时间:2017-11-20 10:19:01

标签: c++ arrays

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

任何人都可以解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

问题是myVar是一个非常量变量,并且您无法在堆栈上定义具有非常量长度的数组。一些解决方案是:

  • myVar声明为const int myVar = 100;以使其成为常量,这适合您的代码示例。
  • 使用例如int *up = new int[myVar];
  • 在堆上分配数组
  • 使用std::vector代替数组。 vector<int> up = new vector<int>(myVar)