2017-08-03 74 views
-1

當我的Xcode編譯我的代碼我有此錯誤的功能被 錯誤:控制可以達到非void函數C++的Mac的Xcode錯誤:控制可以達到非void函數的端

// Displays the abilities 
pair<string, int> getability(string pclass, int mana, int inte, int level) { 
    string input; 
    string ability; 
    int cost; 
    cout << "Choose an ability" << endl; 
    if (pclass == "Champion") { // Champion Section 
     cost = inte*(level); 
     cout << "[1] Cleaving Strike [" << cost << " mana]" << endl; 
     cout << "[2] Melting Thrust [" << cost << " mana]" << endl; 
     cout << "[3] Critical Bash [" << cost << " mana]" << endl; 
     cost = inte*(level+1); 
     cout << "[4] Purify [" << cost << " mana]" << endl; 
     cost = inte*(level); 
     cin >> input; 
     if (input == "1") { 
      ability = "cleaving strike"; 
      if (mana > cost) { 
       mana = mana - cost; 
       return {ability, mana}; 
      } 
     } else if (input == "2") { 
      ability = "melting thrust"; 
      if (mana > cost) { 
       mana = mana - cost; 
       return {ability, mana}; 
      } 
     } else if (input == "3") { 
      ability = "critical bash"; 
      if (mana > cost) { 
       mana = mana - cost; 
       return {ability, mana}; 
      } 
     } else if (input == "4") { 
      ability = "purify"; 
      if (mana > cost) { 
       cost = inte*(level+1); 
       mana = mana - cost; 
       return {ability, mana}; 
      } 
     } 
    } 
} 

的端這就是我稱之爲的方式,我目前正在尋找和尋找,並找不到解決此問題的方法。我正在使用Mac,並使用Xcode。請幫幫我!

tie(action, mana) = getability(pclass, mana, inte, level); 
+0

是什麼'getability'返回,如果'pcclass'不是'「冠軍」'或'如果是input'不是1,2 ,3或4? –

+0

如果你的用戶輸入的東西不在if-else之中,例如「5」,你的函數不會返回任何東西。在C++中,你必須總是返回一些東西(或拋出異常) – litelite

回答

0

您以input作爲字符串。如果用戶輸入數字1-4以外的任何內容會怎麼樣?那麼5?那麼hello?你不處理任何這些情況。如果你確定你的用戶不會搞砸,那麼你可以在你的if之外進行回報,但這不會使你的程序變得健壯。

我建議改變inputint(你只是在尋找整數),並添加一個循環來檢查他們的輸入。

int input; 
cin >> input; 

while(input < 0 || input > 4) { 
    cout << "BAD INPUT, try again: "; 
    cin >> input; 
} 

//all of your if statements 

但是編譯器是愚蠢的,因爲所有的計算機都。它看到你有if...else if...else if...和技術上的原因,我們仍然有辦法離開,而不必進入任何分支。所以,在函數結束時,你可以添加一個虛擬的回報:

return {"", 0}; 
-1

我想我可能已經想通了,無論我怎麼想,它都會返回一些東西......新的代碼在下面。

// Displays the abilities 
pair<string, int> getability(string pclass, int mana, int inte, int level) { 
    string input; 
    string ability; 
    int cost; 
    cout << "Choose an ability" << endl; 
    if (pclass == "Champion") { // Champion Section 
     cost = inte*(level); 
     cout << "[1] Cleaving Strike [" << cost << " mana]" << endl; 
     cout << "[2] Melting Thrust [" << cost << " mana]" << endl; 
     cout << "[3] Critical Bash [" << cost << " mana]" << endl; 
     cost = inte*(level+1); 
     cout << "[4] Purify [" << cost << " mana]" << endl; 
     cost = inte*(level); 
     cin >> input; 
     if (input == "1") { 
      ability = "cleaving strike"; 
      if (mana > cost) { 
       mana = mana - cost; 
       return {ability, mana}; 
      } else { 
       ability = "none"; 
       return {ability, mana}; 
      } 
     } else if (input == "2") { 
      ability = "melting thrust"; 
      if (mana > cost) { 
       mana = mana - cost; 
       return {ability, mana}; 
      } else { 
       ability = "none"; 
       return {ability, mana}; 
      } 
     } else if (input == "3") { 
      ability = "critical bash"; 
      if (mana > cost) { 
       mana = mana - cost; 
       return {ability, mana}; 
      } else { 
       ability = "none"; 
       return {ability, mana}; 
      } 
     } else if (input == "4") { 
      ability = "purify"; 
      if (mana > cost) { 
       cost = inte*(level+1); 
       mana = mana - cost; 
       return {ability, mana}; 
      } else { 
       ability = "none"; 
       return {ability, mana}; 
      } 
     } else { 
      ability = "none"; 
      return {ability, mana}; 
     } 
    } else { 
     ability = "none"; 
     return {ability, mana}; 
    } 
} 
+0

你「認爲」它有效嗎?是或否 ? –

+0

那麼我可以編譯代碼,並沒有關於這個錯誤。爲什麼我沒有別的,或默認語句導致沒有可能的方式的唯一原因,因爲它不返回你給的值。 – Handge

+0

請不要發佈你不確定的答案。如果您有疑問,請研究這些疑惑並將您的發現納入您的答案中。關於這個答案,似乎最後的單個return語句會做同樣的事情。 –

相關問題