2

我的程序已完成,我得到的唯一错误来自我的二进制搜索和线性搜索。它们是相同的错误,所以我只发布一个。

bool searchByDescriptionBinary(char desc[][DESC_SIZE],
                             const int NUM_ROWS,
                             char searchValue[DESC_SIZE],
                             int& foundPosition)

 {
 int first = 0,
     last = NUM_ROWS - 1,
     middle,
     position = -1;
 bool found = false;

 while (!found && first <= last)
 {
     middle = (first + last) / 2;
     if (desc[middle] == searchValue)
     {
         found = true;
         position = middle;
     }
     else if (desc[middle] > searchValue)
         last = middle - 1;
     else
         first = middle + 1;
 }
 return position;
 }
4

4 回答 4

3

您的函数被定义bool为返回类型,但它返回一个int(以return position末尾语句的形式)。这是一个类型错误。更改一种或另一种类型,直到他们同意,它应该编译。

于 2011-12-01T01:53:52.417 回答
1

您的函数被定义为返回bool,但您试图返回position,它被声明为int

你想返回found(这将是trueor false),如果found == true设置了foundPosition = position

于 2011-12-01T01:55:25.817 回答
0

你应该return found;代替return postion;

于 2011-12-01T10:26:14.993 回答
0

首先,您极不可能收到您所说的错误。问题的根源在于您尝试从声明为return 的函数中return position返回。你想通过这个做什么?你为什么要从函数中返回一个?positionintboolintbool

在任何情况下,这都不是非法的,这意味着int它将被隐式转换为bool符合 C++ 语言的布尔转换规则。在这种情况下,一些编译器会发出警告,但不会发出错误。无论如何,这肯定不是你想要的。

其次,从您的函数声明中,很明显您打算通过foundPosition参数(声明为int &)返回索引。return函数末尾的语句显然应该做,return found而不是return position。然而,在您的代码中,您完全忽略了foundPosition. 为什么?你为什么要尝试这个位置而不是像最初打算return的那样通过参数发送它?foundPosition这是你的代码吗?

第三(正如@Blastfurnace 已经在评论中指出的那样),您的==比较>并没有像您认为的那样做。您不能使用内置的比较运算符比较 C 风格的字符串。你必须strcmp改用。

于 2011-12-01T02:02:51.483 回答