2 gyl miracle gyl_miracle 于 2015.05.31 11:10 提问

编译出错:“choice”: 未声明的标识符 ;“delete”: 不能删除不是指针的对象 1>

#include "stdafx.h"
#include
using namespace std;
double capital=0.0;/*将全额capital设置为全局变量,目的是在多次购买时,
下一次的全额不会覆盖上一次的全额值*/
double cal(int num,double quantity)
{
switch(num)
{
case 0 :
return quantity*1.50;//case中有return语句,所以不需要break语句
case 1 :
return quantity*1.70;
case 2 :
return quantity*4.60;
case 3 :
return quantity*0.90;
case 4 :
return quantity*2.50;
case 5 :
return quantity*3.70;
case 6 :
return quantity*7.60;
case 7 :
return quantity*3.90;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
cout<<"提示:"< cout cout int num_choice;//买了几种水果
while(1)
{
int Y_N;
cout cin>>num_choice;
if(num_choice==0)//不买东西
{
cout<<"您确定只是看看吗?要不买点吧?继续请按1,退出请按0"< cin>>Y_N;
if(Y_N==0)
{
cout<<"退出成功!"< break;
}
else if(Y_N==1)
{}
else
{
cout }
}
else
{
cout int *choice=new int[num_choice];//事先不知道购买多少种水果,所以有new的方式申请内存
double *quantity_choice=new double[num_choice];
for(int i=0;i cin>>choice[i];//输入购买水果的各类编号
cout<<"请输入对应各种水果的重量:"< for(int j=0;j cin>>quantity_choice[j];//输入购买水果的重量
for(int i=0;i capital+=cal(choice[i],quantity_choice[i]);//计算金额
cout cin>>Y_N;

        if(Y_N==0)
        {
            cout<<"开始结算,请付"<<capital<<endl;
            break;
        }
        else if(Y_N==1)
        {}
        else
        {
            cout<<"亲!请不要随便按,要按规定输入哦!"<<endl;
        }
    }

}
delete[] choice;
choice=NULL;
delete[] quantity_choice;
quantity_choice=NULL;
system("pause");
return 0;

}

2个回答

caozhy
caozhy   Ds   Rxr 2015.05.31 13:45
已采纳

在你main开始的的地方加上
int *choice;
double *quantity_choice;

对应的
choice=new int[num_choice];//事先不知道购买多少种水果,所以有new的方式申请内存
quantity_choice=new double[num_choice];
不要定义。

另外cal函数应该给switch加上default分支,否则可能出现无返回值的情况

gyl_miracle
gyl_miracle 谢谢您的回复,很好的解决了我的问题!
2 年多之前 回复
wlj1234
wlj1234   2015.05.31 12:11

choice被定义成局部变量了
int *choice = null; //可以定义在设置
if(num_choice==0)//不买东西

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!