2014-09-20 67 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

相关问题