2014-09-20 89 views
0

我在程序中編寫了兩個函數來檢查字符串是否具有指定的數字代碼給其結構數組,或者給定的數字代碼是否在同一結構數組中具有指定的字符串。基本上,如果我只知道其中的一個,我可以得到另一個。我寫了以下內容:錯誤:並非所有控制路徑都返回值

int PrimaryIndex::check_title_pos(std::string title) { 
    bool findPos = true; 
    if (findPos) { 
     for (int s = 1; s <= 25; s++) { 
      if (my_list[s].title == title) { 
       return s; 
      } 
     } 
    } else { 
     return -1; 
    } 
} 

std::string PrimaryIndex::check_title_at_pos(int pos) { 
    bool findTitle = true; 
    if (findTitle) { 
     for (int p = 1; p <= 25; p++) { 
      if (my_list[p].tag == pos) { 
       return my_list[p].title; 
      } 
     } 
    } else { 
     return "No title retrievable from " + pos; 
    } 
} 

但是,它表示並非所有控制路徑都有返回值。我認爲else {}語句可以處理,但事實並非如此。同樣,我添加了默認的「return -1;」和「返回」「;」到分別處理int和string的適當函數。這只是導致它出錯。

關於如何保留此代碼的任何想法,因爲我希望它可以工作,但不能測試它,同時讓我的編譯器感到高興?我通過其他搜索意識到,它看到的情況可能以無返回值結束,但從理論上講,如果我是對的,它應該可以正常工作。 :|

感謝

+0

呵呵,我加了return -1;並返回「」;到每個函數的末尾,所以它將被視爲一個終結點,如return 0;彈出在int main()的 – Greg 2014-09-20 23:46:42

+4

看看如果你的'for'循環一直運行到25而沒有'if'語句在裏面,那麼會發生什麼。 – Daniel 2014-09-20 23:48:24

回答

7

在下面的代碼片段,如果s迭代到26無內if不斷評估,以true則從未達到return聲明。

if (findPos) { 
    for (int s = 1; s <= 25; s++) { 
     if (my_list[s].title == title) { 
      return s; 
     } 
    } 
} 
+0

我認爲<= 25只會達到25.我應該修改s ++到++ s嗎?結構數組總共有25個條目。 – Greg 2014-09-20 23:54:04

+1

@Greg當s變爲26時,循環體不運行。 – programmerjake 2014-09-20 23:55:33

+1

數組索引從0開始,因此包含25個項目的數組的有效索引爲0到24. – 2014-09-20 23:55:52

相關問題