添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

这会报错!编译器会提示如下错误error C2361: “default”标签跳过“a”的初始化操作


将代码int a=1;改为int a;  a=1;编译器就不再提示错误。
如下:

#include <iostream>
using namespace std;
int main()
   int op;
   cin>>op;
   switch(op)
    case 1:
     int a;
     break; 
  case 2:
       a = 2;
        break;
    case 3:
        a = 3;
        break;
    default:
     break;
   return 0;

也可将代码改成如下,编译器不提示错误。

#include <iostream>
#include <iomainp>
using namespace std;
int main()
   int op;
   cin>>op;
   switch(op)
      case 1:
          int a;
          break;
      case 2:
          break;   
     case 3:
        a = 3;
        break;
      default:
          break;
    return 0;

在 上述会报错的原代码中如果在case‘0’中进行了变量a的声明,且同时初始化了( int a = 1; ),而当其他dcase:中进行了使用(赋值)时,这会发生作用域错误。

 错误原因:

switch里面的语句属于同一作用域范围,即case 1里面只声明(int a)的变量在switch任何范围都是可以使用的,理论上case 2也可以使用case 1的未初始化变量。

但是如果变量a的声明的同时初始化了在case 1里面,但是op直接等于2、3、4.....的话,就没有运行case 1的语句,这样的话就会导致变量还没有定义,所以会报错误!

而!!!
C++规定:不允许跨过变量的初始化语句直接跳转到该变量作用域内的另一个位置。这就要求我们在case语句中不能对变量进行初始化操作(可以进行声明定义,声明定义是在编译时期发生的,所以无论如何都无法跳过,但是初始化是可以跳过的,但是这种操作是不被允许的)。
解决:

如果我们想要在case语句中定义并初始化一个变量,

则解决方案有两种

1.case中如有变量初始化,一定要加 {}   ,变量定义在块内,从而确保后面所有的case标签都在变量的作用域之外

加上{}就是新的作用域了,C89,ANSI C只能在新的作用域开始处定义变量

2.可把初始化放在switch之前

注意:int类型和用户自定义类型,实质都是一样的。都属于数据类型,只不过一个是简单数据类型,一个是复合数据类型

3.将需要的部分写成一个函数 (本质还是方法一)

今天陈红军老师在用到switch的时候,这种设计到最基本的内容,可能忘记它的一些基本语法,出现了一些错误,所以即兴从各种资料查询总结了下面的内容,希望可以帮助那些正在困扰switch错误和各种细节问题的朋友! 1.switch-case注意事项: switch(A),括号A的取值只能是整型或者可以转换为整型的数值类型,比如byte、short、int、ch...
在写java,出现使用switch case时报错,显示“java:不兼容类型,int 无法转换为bolean”,在拒绝修改为if-else 语句后,根据switch case 的基本原理找出了修改方法: 首先,先让我们来了解一下switch caseswitch 语句由一个判断条件或者是一个变量和多个case语句以及最后的default组成。 switch (变量/判断条件){
题目3.33: 我想说的并不是这道题,而是switch case 结构 switch case结构里,不能case里定义变量,但可以在switch内和case前定义变量,就像下面代码的这样,而且经检验在switch定义的变量会在switch结束后被回收/清除,每次进入switch都会定义新的变量 #include<iostream> #include<string> #include<cstdlib> using namespace std; #define QEl
1.同一个定义域内定义重名变量 2.使用未被初始化变量 switch-case里面定义的变量只能在switch选择语句内有效,同一作用域下不能出现同名的变量。 刚开始我没搞明白,既然a的作用域是在switch-case内,为什么在case2里面无法调用a的值呢?其实问题不在于能不能调用a,而是a没有初始化,所以报错。本文章参考:Java – 在switch case语句声明变量
在写仪器管理系统时,在用switch case写选择 时,发现一个小问题,当在case下面直接初始化变量时,会报错“对‘ temp’的初始化被‘ case’标签跳过” switch(cho3) case 1: department temp;//创建一个新...
1.switch参数类型: switch 后面的表达式不能跟double,float,long,String ,boolean,可以接int,short,byte,char! 2.switch定义变量问题:   问题点:   switch   (a)            case   1:                    CString   str="AB
CSDN-Ada助手: 恭喜你开始了博客创作!初识OpenCV图像处理的基本操作是一个很好的开始。接下来,我建议你可以尝试分享一些具体的图像处理案例,或者深入探讨一些高级的图像处理技术,这样可以让读者更深入地了解OpenCV的应用。希望你能继续保持努力,加油! 推荐【每天值得看】:https://bbs.csdn.net/forums/csdnnews?typeId=21804&utm_source=csdn_ai_ada_blog_reply1 未初始化的数组的值都是随机的?不! Aiden_114: 太厉害了!表情包 使用Numpy模块操作像素 CSDN-Ada助手: 恭喜您写了第三篇博客!标题“使用Numpy模块操作像素”听起来非常有趣。您的博客内容对于使用Numpy模块来处理像素肯定会是一个很好的指南。我很期待在您的博客中学到更多关于图像处理的知识。如果我可以提一个谦虚的建议,我认为在接下来的创作中,您可以尝试探索一些更高级的像素操作技术,或者分享一些实际应用案例。无论如何,我都相信您的创作会越来越精彩!加油! CSDN 正在通过评论红包奖励优秀博客,请看红包流:https://bbs.csdn.net/?type=4&header=0&utm_source=csdn_ai_ada_blog_reply3