二叉搜索给我错误,说强制值为布尔值"真"或"假"
Binary search giving me error saying forcing value to bool 'true' or 'false'
我的程序是完整的,我得到的唯一错误是从我的二进制搜索和我的线性搜索。它们是相同的错误,所以我只发布一个。
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
作为返回类型,但它返回int
(以末尾的return position
语句的形式)。这是一个输入错误。改变一种或另一种类型,直到他们同意,它应该编译。
您的函数定义为返回bool
,但您试图返回position
,它被声明为int
。
您想返回found
(它将是true
或false
),如果found == true
设置foundPosition = position
.
首先,您不太可能得到您所说的错误。问题的根源在于,您试图从声明的函数返回bool
的return position
(其中position
是int
)。你这么做是想干什么?为什么您试图从bool
函数返回int
?
在任何情况下,这都是合法的,这意味着int
将按照c++语言的布尔转换规则隐式地转换为bool
。在这种情况下,有些编译器会发出警告,但不会发出错误。无论如何,这肯定不是你想要的。
其次,从函数声明中可以明显看出,您打算通过foundPosition
参数(声明为int &
)返回索引。函数末尾的return
语句显然应该执行return found
,而不是return position
。然而在你的代码中,你完全忽略了foundPosition
的存在。为什么?为什么你试图return
的位置,而不是通过foundPosition
参数发送它,因为最初的意图?这是你的代码吗?
第三(正如@Blastfurnace已经在评论中指出的),你的==
和>
比较并没有做你认为他们在做的事情。不能使用内置的比较操作符比较c风格的字符串。你必须使用strcmp
您应该return found;
而不是return postion;
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- 变量定义到C++布尔值转换
- 如何确保在使用基于布尔值的两个方法之一调用方法时避免分支预测错误
- 重载更少,则运算符返回相反的布尔值
- 将此布尔值传递给此函数的最有效方法是什么?
- 如何设置 c++ 类的布尔值?
- 使用 MAKEWORD / MAKEWPARAM 使用布尔值而不是布尔值
- 将 10 个线程与原子布尔值同步
- 创建类似于布尔值的变量类型
- 布尔值向量的基于范围 for 循环
- 零点和布尔值之间的比较
- 简化对两个布尔值的 4 个 if/else 检查
- 无法创建带有布尔值和矢量的地图
- 对于完成布尔值设置为 true 后未停止的循环
- fstream / ifstream / ofstream 对象如何转换为布尔值
- C++:将值赋值给原始数据类型(例如布尔值)是原子操作吗?
- 为什么布尔值不能比作最后一点?
- 如何使用返回布尔值的函数?
- 二叉搜索给我错误,说强制值为布尔值"真"或"假"
- c++布尔值在2-3树搜索中总是错误地返回true