首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误C2361:默认标签跳过“查找”的初始化

错误C2361:默认标签跳过“查找”的初始化
EN

Stack Overflow用户
提问于 2012-04-30 09:14:12
回答 3查看 29.7K关注 0票数 22

可能重复:

Why can't variables be declared in a switch statement?

下面的代码中有一个奇怪的错误:

代码语言:javascript
复制
char choice=Getchar();
switch(choice)
{
case 's':
    cout<<" display tree ";
    thetree->displaytree();
    break;

case 'i':
    cout<<"  enter value to insert "<<endl;
    cin>>value;
    thetree->insert(value);
    break;
case 'f' :
    cout<< "enter value to find ";
    cin>>value;
    int found=thetree->find(value);
    if(found!=-1)
        cout<<" found  =  "<<value<<endl;
        else
            cout<< " not found " <<value <<endl;
        break;
default:
    cout <<" invalid entry "<<endl;;
    }

Visual 2010编译器说:

代码语言:javascript
复制
1>c:\users\daviti\documents\visual studio 2010\projects\2-3-4\2-3-4\2-3-4.cpp(317): error C2361: initialization of 'found' is skipped by 'default' label
1>          c:\users\daviti\documents\visual studio 2010\projects\2-3-4\2-3-4\2-3-4.cpp(308) : see declaration of 'found'

我认为我已经正确地写了中断和默认语句,那么错误在哪里呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-30 09:23:14

您需要用限定范围的大括号将您的case 'f':括起来:

代码语言:javascript
复制
case 'f' :
{  
    cout<< "enter value to find ";
    cin>>value;
    int found=thetree->find(value);
    if(found!=-1)
        cout<<" found  =  "<<value<<endl;
    else
        cout<< " not found " <<value <<endl;
    break;
}

或者将found的声明放置在switch之外

票数 64
EN

Stack Overflow用户

发布于 2012-04-30 09:27:26

switch的语义是goto的语义:case没有引入新的范围。因此,found在您的default:中是可访问的(尽管您实际上没有访问它)。跳过一个非平凡的初始化是非法的,所以您的代码成为非法的。

考虑到case 'f':的复杂性,最好的解决方案可能是将其分解为单独的函数。否则,您可以将整个案例放在{...}中,创建一个单独的作用域,或者放弃初始化,编写:

代码语言:javascript
复制
int found;
found = thetree->find(value);

(为了完整起见,我提到这一点。这不是我要重新评论的解决方案。)

票数 25
EN

Stack Overflow用户

发布于 2012-04-30 09:17:22

您需要在大括号内声明switch's case的内部变量。

代码语言:javascript
复制
case 'f' :
{
    ...
    int found=thetree->find(value);
    ...
}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10381144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档