在 Switch 语句中声明变量
Declaring variables in 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)
你能告诉我我做错了什么吗
如错误消息所述,跳转到每个开关标签会传递开关块内声明的一个或多个变量的初始化,这是不允许的。
您可以通过将每个变量限定在 switch 块内的块内来解决此问题:
switch(choice)
{
case 1:
{
Fast obj;
obj.print();
break;
}
case 2:
{
Slow obj;
obj.print();
break;
}
default: cout << "No type";
}
如果要在其中声明变量,则必须在每个 case 语句中使用块:
switch(choice)
{
case 1:
{
Fast obj1;
obj1.print();
}
break;
case 2:
{
Slow obj2;
obj.print();
}
break;
default:
cout << "No type";
}
我有一个函数可以从两个不同的对象中声明两个对象 类 :
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 块内的块内来解决此问题:
switch(choice)
{
case 1:
{
Fast obj;
obj.print();
break;
}
case 2:
{
Slow obj;
obj.print();
break;
}
default: cout << "No type";
}
如果要在其中声明变量,则必须在每个 case 语句中使用块:
switch(choice)
{
case 1:
{
Fast obj1;
obj1.print();
}
break;
case 2:
{
Slow obj2;
obj.print();
}
break;
default:
cout << "No type";
}