如果返回类型是对象,是否可能削减编译器投诉?

时间:2011-03-12 13:26:05

标签: c++

 pseudocode :
  function takes "int c" and "list d" 
          from start to end of the list search "c" in "list d"
               when see it 
                    return index

由于在迭代中写入返回,编译器开始抱怨非void函数。 如何减少编译器投诉?

注意:c始终在列表中,但其索引不可知。

编辑:如果我改变如下;

  pseudocode :
  function takes "string name" and "list d" 
          from start to end of the list search "c" in "list d"
               when see it 
                    return object

我该怎么办?

4 个答案:

答案 0 :(得分:5)

发布实际代码确实会有所帮助。我猜你有类似的东西:

int find(int c, list d) {
  for (*iterate over list*) {
    if (item == c)
      return index;
  }
  // <- nothing here
}

在大多数情况下,编译器无法知道列表将始终包含c。所以你需要添加一个return语句。这样的事情很平常:

int find(int c, list d) {
  for (*iterate over list*) {
    if (item == c)
      return index;
  }
  // Never reached
  return -1; // or throw an exception
}

(或选择其他无效索引值)。请留下详细评论,说明为什么永远不会达到该部分。 如果您已经使用它们,那么抛出异常可能是一个好主意 - 如果您对列表的假设始终包含c失败,则会发现错误。

答案 1 :(得分:2)

你做不到。在循环之后放置“假”返回并发表评论,如:

// This never should happen.
   return -1;

如果没有找到,你也可以考虑抛出异常...... 但问题是编译器投诉,所以你必须在那里返回。

答案 2 :(得分:2)

你可以这样做

int index = -1

search in list 
  if found 
    break;

return index;

答案 3 :(得分:0)

编译器指出你,如果“c”不在“list d”中,你的程序会导致未指定的行为。如果找不到“c”,请确定你的函数应该返回什么,然后返回,并且编译器将停止抱怨。如果你真的绝对确定“c”在列表中,那么你返回的并不重要。但如果这是真的,那就是代码味道。