`error:通过引用传递指针的非const引用`的初始化无效

时间:2017-06-10 12:51:27

标签: c++ compiler-errors pass-by-reference

我试图实施mergesort算法,但我不理解这个错误:

  

错误:从'int *'类型的右值开始无效初始化'int *&'类型的非const引用   Mergesort(v,0,TAM - 1);
  ___________________ ^

     

注意:初始化'void Mergesort(int *&,int,int)'的参数1   void Mergesort(int *& v,int ini,int fin);
  ^

我的代码的相关部分:

#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;

void Mergesort (int *&v, int ini, int fin);
void Fusion (int *&v, int ini, int centro, int fin);

int main(){
    const int TAM = 20;
    int v[TAM];

    time_t t;
    srand ((int) time(&t));

    const int MIN = -100, MAX=100, NUM_VALORES = MAX-MIN+1;

    for (int i = 0; i < TAM; i++){
        v[i] = (rand() % NUM_VALORES) + MIN;

    }

    ...

    Mergesort (v, 0, TAM - 1);

    ...

    return 0;
}

void Mergesort (int *&v, int ini, int fin){
    int centro;
    if (ini < fin){
        centro = (ini + fin) / 2;
        Mergesort (v, ini, centro);
        Mergesort (v, centro + 1, fin);
        Fusion (v, ini, centro, fin);
    }
}

void Fusion (int *&v, int ini, int centro, int fin){
    int aux[fin - ini + 1];
    int h, i, j, k;

    h = ini;
    i = ini;
    j = centro + 1;

    while ( (i <= centro) && (j <= fin) ){
        if (v[i] <= v[j]){
            aux[h] = v[i];
            i++;
        }else{
            aux[h] = v[j];
            j++;
        }
        h++;
    }

    if (i > centro){
        for (k = j; k <= fin; k++){
            aux[h] = v[k];
            h++;
        }
    }else{
        for (k = i; k <= centro; k++){
            aux[h] = v[k];
            h++;
        }
    }

    for (k = ini; k <= fin; k++){
        v[k] = aux[k];
    }
}

我知道这个网站有关于类似错误的问题,但我无法解决我的问题。

1 个答案:

答案 0 :(得分:1)

我取代了*&amp;在你的Mergesort中使用*(int *&amp;,int,int)使它成为Mergesort(int *,int,int)并且对我有效。