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

0 c++ switch-statement

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();

}
Run Code Online (Sandbox Code Playgroud)

为什么当我将上面的代码作为 switch 语句运行时会出现错误,但当我使用 if/else-if 时它会起作用?基本上,程序根据菜单中选择的内容来实例化一个对象。一旦创建了对象,就会调用构造函数,构造函数会调用另一个函数,依此类推...基本上,每次在 while 循环中都会创建一个新对象。由于我在代码中没有得到很多反馈,上述实现是否会被视为“糟糕的编程”?

谢谢!

编辑:错误是:

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;
Run Code Online (Sandbox Code Playgroud)

小智 5

C++ 不允许开关(或其他类似代码,例如goto)跳过初始化。在开关中, 和QueueStack处于相同的范围内,并且开关代码可能不会在该范围内初始化其中一个(或两个),具体取决于所打开的值。对于 if/else 来说情况并非如此,它们处于不同的范围。