初学者C ++:为什么这个switch语句给我一个错误?

Beginner C++: Why is this switch statement giving me an error?

本问题已经有最佳答案,请猛点这里访问。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int menuDecision = displayMenu();

  //WHILE USER DOESN'T SELECT QUIT
while(menuDecision != 3){
/*
    if(menuDecision == 1){
        Queue myQueue;
    }
    else{
        Stack myStack;
    }
*/


    switch(menuDecision){
        case 1: Queue myQueue;
                break;
        case 2: Stack myStack;
                break;
    }

    menuDecision = displayMenu();

}

当我把上面的语句作为switch语句运行时,它会给我一个错误,但是当我使用if/else时,如果它工作了,怎么会这样呢?基本上,程序根据菜单中选择的内容来实例化一个对象。一旦创建了一个对象,就调用了构造函数,而构造函数调用了另一个函数等等……基本上,在while循环中每次都会创建一个新对象。因为我在代码中没有得到很多反馈,所以上面的实现会被认为是"糟糕的编程"吗?

谢谢!

编辑:错误是:

1
2
3
4
5
main.cpp:27:4: error: cannot jump from switch statement to this case label
                        case 2: Stack myStack;
                        ^
main.cpp:25:18: note: jump bypasses variable initialization
                        case 1: Queue myQueue;


C++不允许交换机(或其他类似的代码,如EDCOX1×0)来跳过初始化。在交换机中,QueueStack都在同一范围内,并且交换机代码可能不在该范围内初始化其中的一个(或两个),这取决于所打开的值。如果它们处于不同的范围,那么对于if/else就不是这样了。