2012-08-16 33 views
1

當我使用while循環和switch語句時,我收到了一些錯誤。我檢查了大括號,我找不到錯字。有人可以看到這個問題嗎?在應用程序菜單中顯示的錯誤

bool menu = true; 
    while(menu)// Loop to revert back to menu when choice is not compatable with options. 
    { 
    int selection; 
    cout<< "Choice: "; 
    cin>> selection; 

     switch(selection) 
     { 
     case 1: 
      cout<< "View Elements."; 
      Array.print(); 
      break; 
     case 2: 
      cout<< "Delete Element. "; 
      break; 
     case 3: 
      cout<< "Delete All Elements. "; 
      //Array.clear(OrderedArray); 
      break; 
     case 4: 
      cout<< "Insert Element. "; 
      //Array.Insert(); 
      break; 
     case 5: 
      cout<< "Search for Element. "; 
      bool searchMenu = true; 
      while(searchMenu) 
      { 
      int searchSelection; 
      cout<< "Choice: "; 
      cin>> searchSelection; 

      switch(searchSelection) 
      { 
       case 1: 
       cout<< "Linear Search. "; 
       //Array.linearSearch(); 
        break; 

       case 2: 
       cout<< "Binary Search "; 
       //Array.binarySearch(); 
        break; 
      } 

      } 
      break; 
     case 6: 
      cout<< "Store. "; 
      bool storeMenu = true; 
      while(storeMenu) 
      { 
      int storeSelection; 
      cout<< "Choice: "; 
      cin>> storeSelection; 

      switch(storeSelection) 
      { 
       case 1: 
       cout<< "Write File "; 
       //Array.writeFile(); 
        break; 

       case 2: 
       cout<< "Read File "; 
       //Array.readFile(); 
        break; 
      } 
      } 
      break; 
     case 7: 
      cout<< "Sort. "; 
      Array.sort(); 
      break; 
     case 8: 
      cout << "Exit."; 
      cout << "Please press Enter to exit."; 

     } 
    } 

這些都是錯誤的:

error C2360: initialization of 'searchMenu' is skipped by 'case' label c:\users\conor\documents\college\c++\projects\repeat - ordered array\repeat - ordered array\orderedarray.cpp 71 1 Repeat - Ordered Array 

error C2360: initialization of 'storeMenu' is skipped by 'case' label c:\users\conor\documents\college\c++\projects\repeat - ordered array\repeat - ordered array\orderedarray.cpp 94 1 Repeat - Ordered Array 

error C2360: initialization of 'searchMenu' is skipped by 'case' label c:\users\conor\documents\college\c++\projects\repeat - ordered array\repeat - ordered array\orderedarray.cpp 94 1 Repeat - Ordered Array 

error C2360: initialization of 'storeMenu' is skipped by 'case' label c:\users\conor\documents\college\c++\projects\repeat - ordered array\repeat - ordered array\orderedarray.cpp 98 1 Repeat - Ordered Array 

error C2360: initialization of 'searchMenu' is skipped by 'case' label c:\users\conor\documents\college\c++\projects\repeat - ordered array\repeat - ordered array\orderedarray.cpp 98 1 Repeat - Ordered Array` 
+0

'數組'看起來像一個類,而不是一個對象。 – Derek 2012-08-16 15:51:29

+0

[爲什麼不能在switch語句中聲明變量?](http://stackoverflow.com/questions/92396/why-cant-variables-be-declared-in-a-switch-statement) – 2012-08-16 16:23:38

回答

4

一旦case語句的代碼變得比兩行或三行更長,它可能應該變成一個單獨的函數。特別是使用這些嵌套菜單。其他答案是正確的,編譯器抱怨在case語句中定義變量;代碼審查人員會抱怨switch語句太複雜。

2

您必須包裝switch語句中一個新的塊({ })裏面的變量定義,即

switch (var) { 
case X: { 
    bool var = here; 
} 
} 
1

不能create-初始化case塊內的變量,除非您爲它們創建本地範圍:

switch(Foo) 
{ 
    case A: 
    int a = 0; <== error 
    break; 

    case B: 
    { 
     int b = 0; <== ok 
    } 
    break; 
} 
+0

只是爲了混淆事物,「int a; a = 0;'會沒事的。問題不是創建變量,而是初始化它們。不是我推薦這種方法... – 2012-08-16 15:50:16

+0

@PeteBecker:謝謝,知道這件事。 +1給你的答案 – Andrew 2012-08-16 15:52:32

相關問題