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

时间:2017-06-01 19:58:07

标签: 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();

}

为什么当我将上述内容作为switch语句运行时,它会给我一个错误但是当我使用if / else时它是否有效?基本上程序根据菜单中选择的内容实例化一个对象。一旦创建了一个对象,就会调用构造函数,构造函数会调用另一个函数,依此类推......基本上,每次在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;

1 个答案:

答案 0 :(得分:4)

C ++不允许切换(或其他类似代码,例如goto)跳过初始化。在交换机中,QueueStack都在同一范围内,并且交换机代码可能不会在该范围内初始化它们中的一个(或两个),具体取决于价值被开启。对于if / else,它们在不同的范围内也不是这样。