c++ - 无法将参数 1 从 'int' 转换为 'int []'

标签 c++ binary-search dynamic-arrays selection-sort

对于我的编程课的作业,我收到此错误: 错误 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;
        }
    }
}

最佳答案

您的签名(声明)是

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*

关于c++ - 无法将参数 1 从 'int' 转换为 'int []',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29505193/

相关文章:

c++ - 提升 asio 同步与异步操作性能

c++ - 成员函数可以通过哪些方式相互比较?

c++ - 将非托管 C++ 方法传递给 C# dll 进行回调

c++ - cpp 中此指针的大小

java - 我的索引越界错误发生在哪里?

java - 编译器错误? Java二分查找

c++ - 二进制搜索中 mid=(beg+end)/2 和 mid=beg+(end-beg)/2 有什么区别?

c - C中检查最长匹配字符串的方法?

c - 如何在不使用STL的情况下创建动态数组 vector ?

delphi - DynArraySize() 仅能正确运行最多 649 个整数元素的数组