对于我的编程类的作业,我收到此错误: 错误1错误C2664:'binarySearch':无法将参数1从'int'转换为'int []'第34行。
#include<iostream>
using namespace std;
int selectionSort(int[], int);
int binarySearch(int[], int, int);
int sorted;
int main()
{
int size;
int i;
int desirednum;
cout << "How many values do you want to enter?";
cin >> size;
int* userarray = 0;
userarray = new int[size];
for (i = 0; i < size; i++)
{
cout << "Enter a value: ";
cin >> userarray[i];
}
int sorted = selectionSort(userarray, size);//calls the selection sort function
cout << "What value are you looking for: ";//asks what value they are searching for
cin >> desirednum;
int location = binarySearch(sorted, size, desirednum);
delete[] userarray;
return 0;
}
int selectionSort(int numbers[], int size)
{
int i, j, min, minidx, temp, desirednum, sorted = 0;
cout << "What value are you looking for: ";
cin >> desirednum;
for (i = 0; i < (size - 1); i++)
{
min = numbers[i];
minidx = i;
for (j = i + 1; j < size; j++)
{
if (numbers[j] < min)
{
min = numbers[j];
minidx = j;
}
}
if (min < numbers[i])
{
temp = numbers[i];
numbers[i] = min;
numbers[minidx] = temp;
sorted++;
}
}
return sorted;
}
int binarySearch(int& user_array, int amount, int value)
{
int left, right;
int* middle;
left = 0;
right = amount - 1;
while (left <= right)
{
middle = (int*)((left + right) / 2);
if (value == user_array[middle])
{
return *middle;
}
}
}
答案 0 :(得分:1)
您的签名(声明)是
int binarySearch(int[], int, int);
但你的定义是:
int binarySearch(int& user_array, int amount, int value)
这不一样。 user_array
只是通过引用获取int
。你想要一个数组(或一个指针)。
顺便说一句,amount
相当误导。 size
会更加准确和典型。
以下是预期语法和用法的示例:
void printArray(int array[], int size) {
for(int i = 0; i < size; ++i) {
std::cout << array[i];
}
}
// Usage
int array[] = {1,2,3};
printArray(array, 3);
请注意,参数的类型为int[]
而不是int&
(仅仅是对int
的引用)。您也可以使用int*
。
答案 1 :(得分:0)
我还没有看过C ++,但我可以告诉你对binarysearch()函数的调用,你传入一个int而不是一个整数数组。你传入变量&#34; sorted&#34;将binarysearch作为第一个参数。 &#34;排序&#34;声明为int并分配了selectionsort函数的返回值。 selectionsort()的定义返回类型为int。
我认为主要的问题是你应该传递变量&#34; userarray&#34;作为binarysearch()的第一个参数。如果第一个参数是binarysearch(),请查看名称。
从selectionsort(已排序)返回的值似乎只是一个计数器,用于跟踪为执行选择排序必须进行的交换次数。如果您不需要该信息(我没有看到该变量的任何使用),那么您可以将selectionsort设置为void函数。
编辑 - 另外(感谢Mike),我刚刚注意到函数声明与定义的区别。