在开关语句中声明变量
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(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";
}
相关文章:
- 在疯狂的部分中声明变量
- 如何在C++中为高分辨率时钟声明变量?
- 在命名空间中声明变量,在 main 中定义它,使其对所有其他文件可见
- CUDA 的性能取决于声明变量
- 如何在不为其声明变量的情况下获取和使用常量值的地址?
- C++声明变量时自动类型推断而不初始化
- 在不同循环中多次声明变量的优点
- 奇怪的错误 C2131 与 constexpr 声明变量
- 是否可以在 "if" 语句中声明变量?
- 在python-ctypes中声明变量并传递给dll函数
- 在递归函数C++中声明变量
- 只有一个定义/声明时标头声明变量的多堆定义错误
- 奇怪的未声明变量编译器错误
- 我在C++程序中声明变量时遇到问题
- 在命名空间中声明变量
- C++ lambda 按值捕获,而无需更早声明变量
- 声明变量以保存字符串列表时的内存分配
- 如何声明C 变量应突变
- 为什么允许在开关语句中声明变量?但不是声明 初始化
- 在同一命名空间中声明变量和函数是否出错?[C++]