C++中switch case 中定义变量


在C++中switch case中定义变量


1.   

int n = 3;

//代码1

switch (n)
    {
    case 2:
        int y = 4;
        cout << y << endl;
        break;
    case 3:
        int z = 5;
        cout << z << endl;
        break;
    }

报错信息:error C2360: “y”的初始化操作由“case”标签跳过

这是因为可能出现在case 2中定义了,但是在case 3中使用了(当然,我们没在case3中使用了,但编译器认为这种可能会发生),但程序执行的跳过了case 2,执行的是case 3,这个时候在case 3中使用y相当于使用了一个没有定义的变量,相当于出现这种代码:
//代码2

int n = 3;
    switch (n)
    {
    case 2:
        int y = 4;
        cout << y << endl;
        break;
    case 3:
        cout << y << endl;
        break;
    }

代码2中的case 3没有报错,原因是在case 3,int z的作用域在它的下面都可以使用,不存在作用域的问题。


解决办法:

1.在switch上面定义变量

2.在case中加上大括号,限定变量的作用域


//代码3

    int n = 3;
    switch (n)
    {
    case 2:
        {
            int y = 3;
            cout << y << endl;
        }    
        break;
    case 3:
        cout << n << endl;
        break;
    }

3.先定义,在赋值


//代码4

    int n = 3;
    switch (n)
    {
    case 2:
        int y;
        y = 3;
        cout << y << endl;
        break;
    case 3:
        cout << n << endl;
        break;
    }
   


//代码5

    int n = 3;
    switch (n)
    {
        int y = 3;
    case 2:
        cout << y << endl;
        break;
    case 3:
        cout << n << endl;
        break;
    }

在这里两个case语句都有报错,“y”的初始化操作由“case”标签跳过。代码4中按理来说y的已经定义并初始化了,且这个int y=3,这句不存在不跳过的可能。报错原因不明。

猜你喜欢

转载自blog.csdn.net/hahahzzzzz/article/details/64905765
今日推荐