初学者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;
答
C++不允许开关(或其它类似的代码,诸如goto
)跳过initialisations。在交换机中,Queue
和Stack
处于相同的范围,并且交换机代码可能不会在该范围内初始化它们中的一个(或两者),这取决于所接通的值。对于if/else,这并非如此,因为他们处于不同的范围。
+0
谢谢!了解 – maylay97
错误明确指出'跳过绕过变量初始化' – NathanOliver
错误消息(而不是一个警告)告诉你**完全**有什么问题。 – IInspectable
您可以将每个初始化设置在一个范围内以摆脱警告。 – drescherjm