C++ 二进制搜索给我错误,告诉我强制值为bool';正确';或';假';

C++ 二进制搜索给我错误,告诉我强制值为bool';正确';或';假';,c++,binary-search,linear-search,C++,Binary Search,Linear Search,我的程序已经完成了,唯一的错误是我的二进制搜索和线性搜索。它们是相同的错误,所以我只想发布一个 bool searchByDescriptionBinary(char desc[][DESC_SIZE], const int NUM_ROWS, char searchValue[DESC_SIZE], int& fo

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

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;
 }
bool searchByDescriptionBinary(char desc[][desc_SIZE],
const int NUM_行,
字符搜索值[DESC_SIZE],
内部和内部位置)
{
int first=0,
last=NUM_行-1,
中间的
位置=-1;
bool-found=false;
while(!found&&first searchValue)
最后=中间-1;
其他的
第一个=中间+1;
}
返回位置;
}

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

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


您希望返回
found
(它将是
true
false
),并且如果
found==true
set
foundPosition=position
,那么首先,您不太可能得到所说的错误。问题的根源是您试图从声明为返回
bool
的函数中
返回位置
,其中
位置
是一个
int
。你想用这个做什么?为什么您试图从
bool
函数返回
int

无论如何,这不是非法的,这意味着按照C++语言的布尔转换规则,将<代码> int >代码>隐式转换为<代码>布尔O/COD>。在这种情况下,某些编译器会发出警告,但不会发出错误。无论如何,这肯定不是你想要的

其次,从函数声明中可以明显看出,您打算通过
foundPosition
参数(声明为
int&
)返回索引。函数末尾的
return
语句显然应该执行
returnfound
,而不是
returnposition
。然而,在代码中,您完全忽略了
foundPosition
的存在。为什么?为什么您试图
返回
位置,而不是像最初打算的那样通过
foundPosition
参数发送位置?这是你的密码吗


第三(正如@blastfurny在评论中已经指出的那样),您的
==
比较并没有达到您认为的效果。不能使用内置比较运算符比较C样式字符串。您必须使用strcmp

您应该
返回find而不是
返回位置

ty的小伙子们非常感谢help@Gian:这是类型不一致,但不是错误。在C++语言中,从代码< int 值初始化一个<代码> Boo.<代码>值是完全合法的,尽管它的效果肯定不是OP所打算的。它可能是一个类型良好的C++程序(尽管OP指定的错误发生了,所以也许有些编译器选项可以将其视为一个错误),但这仍然是一个“类型错误”,从一般意义上讲。例如,我们可以讨论非类型化语言中的运行时类型错误,也可以讨论具有某些类型系统属性的语言中不存在类型错误。“这是一个类型错误”是“就您试图实现的目标而言,您错误地使用了不同类型的值”的缩写。首先,依赖定义良好的语言类型转换属性是一个非常好的实践。就我个人而言,在这种情况下我不会依赖它,但它根本不是一个错误。其次,您建议只需更改类型的名称,以使它们匹配。在这种情况下,正确的做法是更改代码以使其有意义。原始代码毫无意义。通过机械地更改类型来修复“类型错误”确实会使其编译,但代码仍然没有任何意义,也不会做任何有意义的事情。编写不按预期工作的程序是“良好实践”吗?问题是如何编译它。我假设,如果OP在成功编译后无法找出如何使其工作,那么接下来会出现一个问题。错误?类似的事情通常会触发警告,但不会触发错误。
desc[middle]==searchValue
是否应该比较两个字符串?对于C样式的字符串不能这样做,请改用
strcmp()
library函数。