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

问题描述:

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循环中创建一个新对象。由于我在代码中没有得到很多反馈,上面的实现会被认为是“糟糕的编程”吗?初学者C++:为什么这个switch语句给我一个错误?

谢谢!

编辑:错误是:

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; 
+3

错误明确指出'跳过绕过变量初始化' – NathanOliver

+1

错误消息(而不是一个警告)告诉你**完全**有什么问题。 – IInspectable

+0

您可以将每个初始化设置在一个范围内以摆脱警告。 – drescherjm

C++不允许开关(或其它类似的代码,诸如goto)跳过initialisations。在交换机中,QueueStack处于相同的范围,并且交换机代码可能不会在该范围内初始化它们中的一个(或两者),这取决于所接通的值。对于if/else,这并非如此,因为他们处于不同的范围。

+0

谢谢!了解 – maylay97