2013-02-15 126 views
2

我在Xcode中創建了一個簡單的項目,用於實現算法,現在我試圖實現mergesort。 歸併函數的原型是Xcode編譯器問題

//mergesort.h 
void merge(long *left, long *right, int lsize, int rsize); 
void mergesort(long *data, int datasize); 

實施是

//mergesort.c 
void merge(long *left, long *right, int lsize, int rsize){ 

int i = 0, j = 0, k = 0; 
long *temp = malloc(sizeof(long) * (rsize + lsize)); 

while(i < lsize && j < rsize){ 
    if(left[i] < right[j]){ 
     temp[k++] = left[i++]; 
    }else{ 
     temp[k++] = right[j++]; 
    } 

    if(i == lsize){ 
     for(;j < rsize;){ 
      temp[k++] = right[j++]; 
     } 
    } 

    if(j == rsize){ 
     for(;i < lsize;){ 
      temp[k++] = left[i++]; 
     } 
    } 
} 
memcpy(left, temp, sizeof(long) * (lsize + rsize)); 
free(temp); 
} 

void mergesort(long *data, int datasize){ 
    int lsize, rsize; 
    lsize = datasize/2; 
    rsize = datasize - lsize; 

    if(lsize < 1 || rsize < 1){ 
     return; 
    }else{ 
     mergesort(data, lsize); 
     mergesort(data + lsize, rsize); 
     merge(data, data + lsize, lsize, rsize); 
    } 

所以問題是,我不能編譯代碼。我想知道編譯器說: 「調用函數調用的參數太少,期望4,有2」在調用mergesort()時,即在 mergesort(data,lsize); mergesort(data + lsize,rsize);

這是爲什麼?這是奇怪的默認xcode compilator功能還是我做錯了什麼?

+0

你得到的錯誤是哪一行? – Pete 2013-02-15 20:24:44

+0

符合遞歸調用'mergesort(data,lsize);''mergesort(data + lsize,rsize);'和main()正文中的第一個函數調用 – 2013-02-15 20:29:46

回答

6

你的問題是幾乎可以肯定的是,功能mergesort<stdlib.h>已經定義與原型:

int 
mergesort(void *base, size_t nel, size_t width, 
    int (*compar)(const void *, const void *)); 

即四個參數。因此,無論呼叫失敗,顯然都會產生歧義。

可能最安全的做法是重命名你的功能。

+0

由於這是在Xcode中,您可以通過命令測試Tommy的假設在代碼中單擊一個調用mergesort。這將打開它定義的文件。 – Nocturno 2013-02-15 20:37:24

+0

非常感謝!我很困惑,因爲在我的另一臺帶有linux和gcc編譯器的計算機上沒有問題 – 2013-02-15 20:38:06