2017-06-01 96 views
0
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

回答

3

C++不允許開關(或其它類似的代碼,諸如goto)跳過initialisations。在交換機中,QueueStack處於相同的範圍,並且交換機代碼可能不會在該範圍內初始化它們中的一個(或兩者),這取決於所接通的值。對於if/else,這並非如此,因爲他們處於不同的範圍。

+0

謝謝!瞭解 – maylay97

相關問題