在Switch语句中声明变量

时间:2015-04-23 12:08:41

标签: c++ switch-statement

我有一个声明来自两个不同类的两个对象的函数:

 void car (){
   int choice;
   cout << " What type of car ? ";
   cout <<" 1- Fast . 2- Slow.";
   cin >> choice;
   switch(choice)
   {
     case 1: 
       Fast obj1; 
       obj1.print();
       break;
     case 2:
       Slow obj2; 
       obj.print();
       break;
     default: 
       cout << "No type";
   } 
 }

编译器在以下位置显示错误:

switch(choice)

这是错误

(error: transfer of control bypasses initialization of:
variable "obj1" (declared at line 179)
variable "obj2" (declared at line 181)

你能告诉我我做错了吗

2 个答案:

答案 0 :(得分:8)

正如错误消息所示,跳转到每个开关标签会传递在开关块内声明的一个或多个变量的初始化,这是不允许的。

您可以通过在开关块内的块内查找每个变量来解决此问题:

switch(choice)
{
case 1: 
    {
        Fast obj; 
        obj.print();
        break;
    }
case 2:
    {
        Slow obj; 
        obj.print();
        break;
    }
default: cout << "No type";
} 

答案 1 :(得分:2)

如果要在那里声明变量,则必须在每种情况下使用块语句:

switch(choice)
{
     case 1: 
     {
         Fast obj1; 
         obj1.print();
     }
     break;

     case 2:
     {
         Slow obj2; 
         obj.print();
     }
    break;

    default: 
        cout << "No type";
}