在另一个函数中初始化的 ref 参数传递将产生无效的转换错误

A pass by ref parameter that is initialized in another function produces invalid conversion error

提问人:kerx1998 提问时间:12/5/2020 最后编辑:Remy Lebeaukerx1998 更新时间:12/5/2020 访问量:39

问:

#include<iostream>

//swap function

void swap(int &x, int &y )
{
    int temp;
    temp = x;
    x = y;
    y = temp;
}

//choosing the middle index of the array as the pivot

void choosepivot(int array[],int first,int last) 
{
    swap(array[first],array[(first+last)/2]);
}

//assigns first and last

void firstlastAssign(int array[],int & first, int & last)
{
    first = 0;
    last = sizeof(array)-1;
}

// partitioning function

void partition(int array[], int first, int last, int & pivotIndex)
{   
    firstlastAssign(array,first,last);
    choosepivot(array,first,last);
    int pivot = array[first];
    int lastS1 = first;
    for(int firstUnknown = first+1; firstUnknown<=last; ++firstUnknown)
    {
        if(array[firstUnknown] < pivot)
        {
            ++lastS1;
            swap(array[firstUnknown],array[lastS1]);
        }       
    }
    swap(array[first],array[lastS1]);
    pivotIndex = lastS1;
}

//quicksorting part

void quickSort(int array,int first, int last)
{
    int pivotIndex;
    if(first<last)
    {
        partition(array,first,last,pivotIndex);
        quickSort(array,first,pivotIndex);
        quickSort(array,pivotIndex+1,last);
    }
}

int main(){

    int first,last;

    int ornek[] = {5,87,3,8,0,12,34,6,7,11,73,83,94,92,66};
    quickSort(ornek,first,last);
    int *p;
    p = ornek;
    for(i=0;i<=sizeof(ornek);++i)
    {
        std::cout << p;
        ++*p;   
    }
    
    return 0;
}

此代码应该可以正常工作,因为我引用了原始值。但是,结果会产生错误:pivotIndex

从“int”到“int*”的转换无效

但是我看不出我在将整数转换为指针时犯了什么错误,也不知道检测问题出在哪里的调试方法。

C++ 参数 按引用传递

评论

3赞 UnholySheep 12/5/2020
void quickSort(int array,int first, int last)此函数不接受数组输入
1赞 Raymond Chen 12/5/2020
错误消息告诉您它无法将 (int) 转换为预期的 。但为什么是?看看它的定义。 应该是 。直接阅读错误消息。arrayint[]partitionarrayintvoid quickSort(int array, ...int array[]

答:

0赞 Usama Javed 12/5/2020 #1

将快速排序功能更改为接受数组而不是整数。

void quickSort(int array[], int first, int last)
{
    int pivotIndex;
    if (first < last)
    {
        partition(array, first, last, pivotIndex);
        quickSort(array, first, pivotIndex);
        quickSort(array, pivotIndex + 1, last);
    }
}