【问题标题】:Cannot convert parameter 1 from 'int' to 'int []'无法将参数 1 从“int”转换为“int []”
【发布时间】:2015-06-12 20:28:12
【问题描述】:

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

【问题讨论】:

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


    【解决方案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&amp;(这只是对int 的引用)。你也可以使用int*。

    【讨论】:

    • 好的。所以我已经将变量数量换成了大小。但是我将如何修复声明语句,我取出了&符号但仍然不起作用。
    • @AaronBeta 您需要与binarySearch 中的声明具有相同的定义,即将int binarySearch(int&amp; user_array, int amount, int value) 替换为int binarySearch(int user_array[], int amount, int value)
    • @Mike,当我这样做时,它会导致冲突并给我另一个错误:-表达式必须具有整数或枚举类型第 76 行。它在第 76 行突出显示中间,即在代码中它的 user_array[middle]
    • @AaronBeta,这是一个不相关的错误。这是因为 middle 是 int* 类型,但数组索引必须是整数(而不是指向一的指针)。我不明白为什么变量首先是指针。
    【解决方案2】:

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

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

    从选择排序(排序)返回的值似乎只是一个计数器,用于跟踪必须发生多少交换才能执行选择排序。如果您不需要该信息(我没有看到该变量有任何用途),那么您可以将 selectionsort 设为 void 函数。

    编辑 - 另外(感谢 Mike),我刚刚注意到函数声明与定义的差异。

    【讨论】:

      猜你喜欢
      • 2018-11-25
      • 1970-01-01
      • 2014-04-02
      • 1970-01-01
      • 2015-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多