c ++类切换案例

时间:2012-02-18 10:26:18

标签: c++ class switch-statement

    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'的声明

一些帮助将不胜感激。 感谢

5 个答案:

答案 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;