二进制搜索给我错误说强制值为bool'true'或'false'

时间:2011-12-01 01:50:37

标签: c++ binary-search linear-search

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

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 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

您想要返回foundtruefalse),如果found == true设置foundPosition = position

答案 2 :(得分:0)

首先,你不太可能得到你说你得到的错误。问题的根源在于您从声明为返回return position的函数中尝试position,其中intbool。你想做什么呢?您为什么要尝试从int函数返回bool

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

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

第三(正如@Blastfurnace已经在评论中指出的那样),您的==>比较并没有按照您的想法进行。您无法使用内置比较运算符比较C风格的字符串。您必须改为使用strcmp

答案 3 :(得分:0)

您应该return found;而不是return postion;