switch(choice)
{
case 1:
uinstance1.addNewProduct(data);
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:
break;
case 6:
break;
case 7:
uinstance1.listAllProducts(data);
break;
case 8:
break;
case 9:
break;
case 10:
//name,category,barcode,price,manufacturer,noinstock,soldpermonth,expirydate,discount
// Perishable(string,string,string,double,string,int,int);
Perishable item0("Ferrari","Automobile","9999",2999.99,"Popular",5,0);
data.addNew(item0);
break;
default:
cout<<"Wrong Choice "<<endl;
system("pause");
break;
}
}
嗨,我一直在考虑这个错误很长一段时间,似乎无法弄清楚这个问题。
错误C2361:'default'标签跳过'item0'的初始化 :参见'item0'的声明
一些帮助将不胜感激。 感谢
答案 0 :(得分:7)
整个选择块计为一个范围,如果您在该范围内对变量进行decalare,则需要在每个case语句(每个可能的执行路径)中对其进行初始化。你可以通过在你的情况下创建一个额外的范围来避免这个问题(见括号):
switch(choice)
{
case 1:
uinstance1.addNewProduct(data);
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:
break;
case 6:
break;
case 7:
uinstance1.listAllProducts(data);
break;
case 8:
break;
case 9:
break;
case 10:
{
//name,category,barcode,price,manufacturer,noinstock,soldpermonth,expirydate,discount
// Perishable(string,string,string,double,string,int,int);
Perishable item0("Ferrari","Automobile","9999",2999.99,"Popular",5,0);
data.addNew(item0);
}
break;
default:
cout<<"Wrong Choice "<<endl;
system("pause");
break;
}
}
答案 1 :(得分:3)
MSDN恰当地解释了 error C2361 :
可以在switch语句中跳过标识符的初始化。除非声明包含在块中,否则不能使用初始化程序跳过声明。 (除非它在块中声明,否则变量在范围内,直到switch语句结束。)
始终注意错误编号,提供有关错误原因的重要信息。
你忘记了其中一个案件中的大括号。
case 10:
{
^^^
Perishable item0;
data.addNew(item0);
break;
}
^^^
答案 2 :(得分:1)
您的标签正在进行初始化,这是非法的。非常确定将default
移到顶部应该修复它。您还可以在相关代码周围添加代码块{ }
。如果仍有问题,请将对象移到开关块之外。
答案 3 :(得分:1)
如果没有明确定义范围,则无法在case语句中创建变量。
还有另外一个讨论:Variables inside case statement
答案 4 :(得分:0)
case 10:
{ // <<-- This gives explicit scope for the stack variable and let's you get rid of the error
Perishable item0;
// ...
}
break;