无法将参数 1 从"int"转换为"int []"

Cannot convert parameter 1 from 'int' to 'int []'

本文关键字:int 转换 参数      更新时间:2023-10-16

对于我的编程类的赋值,我收到以下错误:错误1错误C2664:"binarySearch":无法将参数1从第34行的"int"转换为"int[]"。

#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;
        }
    }
}

您的签名(声明)是

int binarySearch(int[], int, int);

但你的定义是:

int binarySearch(int& user_array, int amount, int value)

这不一样。CCD_ 1只是通过引用取一个CCD_。您想要接收一个数组(或指针)。

顺便说一句,amount相当具有误导性。CCD_ 4将更加准确和典型。

以下是预期语法和用法的示例:

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*

我还没有看C++,但我可以在您对binarysearch()函数的调用中看出,您传递的是单个int,而不是整数数组。您将变量"sorted"作为第一个参数传入二进制搜索。"sorted"被声明为int,并被分配了selectionsort函数的返回值。selectionsort()定义为返回类型为int。

我认为主要的问题是应该将变量"userarray"作为第一个参数传递给binarysearch()。查看binarysearch()的第一个参数的名称。

selectionsort(sorted)返回的值似乎只是一个计数器,用来跟踪执行选择排序需要进行多少交换。如果你不需要这些信息(我看不出该变量有任何用处),那么你可以将selectionsort设为一个void函数。

编辑-还有(多亏了Mike),我刚刚注意到函数声明与定义之间的差异。