c++ - 初级 C++ : Why is this switch statement giving me an error?

标签 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-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;

最佳答案

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

关于c++ - 初级 C++ : Why is this switch statement giving me an error?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44316110/

相关文章:

c# - 传递数组指针以放置在 C++ 中的 HashMap 中

c++ - 模板模拟上的 EXPECT_CALL

java - 如何将字母数字电话号码转换为数字

Swift "h"must be bound in every pattern 错误 - 开关问题

c++ - Case 语句中的数组

c++ - 虚拟表的顺序重要吗?

c++ - C++ 中二进制表示的交织 vector

java - 试图找出如何使用一个字符来 System.exit

python - python中的导入语句列表

c++ - 将 CString 写入 .bin 文件