在开关语句中声明变量

Declaring variables in Switch Statement

本文关键字:声明 变量 语句 开关      更新时间:2023-10-16

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

 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)

你能告诉我我做错了什么吗

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

您可以通过限定开关块内块内每个变量的范围来解决此问题:

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

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

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