2015-10-11 65 views
0

2個函數已被使用merge()和mergesort()。 mergesort()試圖調用合併但顯示「不匹配函數」錯誤。在另一個錯誤中調用一個函數:「調用合併(int *&,int&,int&,int&)時沒有匹配函數」

當我使用一個類來編寫代碼

#include<iostream> 
    using namespace std; 


    //MERGE SORT 
    void mergesort(int arr[],int l,int h) 
    { 
     int m=(l+h)/2; 
     if(l<h) 
     { 
       mergesort(arr,l,m-1); 
       mergesort(arr,m,h); 
       merge(arr,l,h,m); 
     } 
    } 

    //CALLING THIS FUNCTION IN mergesort() IS GIVING AN ERROR 
    void merge(int arr[],int l,int h,int m) 
    { 
     int a1[m-l]; 
     int a2[h-m+1]; 

     int i=l,j=m,ptr=0; 

     while(i<m&&j<h+1) 
     { 
         if(a1[i]<a2[j]) 
         { 
             arr[ptr++]=a1[i++]; 
         } 
         else 
         { 
          arr[ptr++]=a2[j++]; 
         } 
     } 

     if(i<m) 
     { 
       for(int k=i;k<m;k++) 
       { 
         arr[ptr++]=a1[k]; 
       } 
     } 
     else 
     { 
      for(int k=j;k<h+1;k++) 
       { 
         arr[ptr++]=a2[k]; 
       } 
     } 
    } 
    void printarray(int arr[], int n) 
    { 
     for(int i=0;i<n;i++) 
     cout<<arr[i]; 
    } 

    int main() 
    { 
     int arr[]={12, 11, 13, 5, 6, 7}; 
     mergesort(arr,0,5); 
     printarray(arr,6); 

     return(0); 
    } 
+0

在C++中,您需要在使用它之前聲明所有*。例如,如果你有一個函數並且想要調用它,你需要在調用之前聲明函數。 –

回答

0

你需要首先聲明合併功能,因爲編譯器完全不認識 應該有多少個參數取不遇到了同樣的錯誤,什麼類型的各這些參數的

#include<iostream> 
using namespace std; 

void merge (int [], int, int, int); 
//MERGE SORT 
void mergesort(int arr[],int l,int h) 
{ 
    int m=(l+h)/2; 
    if(l<h) 
    { 
      mergesort(arr,l,m-1); 
      mergesort(arr,m,h); 
      merge(arr,l,h,m); 
    } 
} 

//CALLING THIS FUNCTION IN mergesort() IS GIVING AN ERROR 
void merge(int arr[],int l,int h,int m) 
{ 
    int a1[m-l]; 
    int a2[h-m+1]; 

    int i=l,j=m,ptr=0; 

    while(i<m&&j<h+1) 
    { 
        if(a1[i]<a2[j]) 
        { 
            arr[ptr++]=a1[i++]; 
        } 
        else 
        { 
         arr[ptr++]=a2[j++]; 
        } 
    } 

    if(i<m) 
    { 
      for(int k=i;k<m;k++) 
      { 
        arr[ptr++]=a1[k]; 
      } 
    } 
    else 
    { 
     for(int k=j;k<h+1;k++) 
      { 
        arr[ptr++]=a2[k]; 
      } 
    } 
} 
void printarray(int arr[], int n) 
{ 
    for(int i=0;i<n;i++) 
    cout<<arr[i]; 
} 

int main() 
{ 
    int arr[]={12, 11, 13, 5, 6, 7}; 
    mergesort(arr,0,5); 
    printarray(arr,6); 

    return(0); 
} 
0

你有mergesort函數的聲明之前,就把這行:

void merge(int arr[],int l,int h,int m); 

或者,您可以交換功能mergemergesort,以便後者在前者之前聲明。

一般而言,您無法引用未聲明任何位置的函數。 上面的行介紹merge函數,即使在mergesort之後定義被阻止。 這樣,該函數的原型是已知的,它可以在另一箇中使用。

相關問題