2012-02-19 43 views
0

我敢肯定,這是一個簡單的答案,對於有c指針的經驗的人來說,但我現在正在努力看到我的錯誤。我得到一個警告,即函數的返回值是一個指針,即使函數的返回類型是一個指針,它也會返回一個來自整數的指針。並獲得該函數具有衝突類型的錯誤。這裏是代碼,我已經刪除了函數的主體,我仍然得到錯誤和警告。函數的衝突類型和強制警告?

long long *merge_sort(long long * arr, int size){ 
// Arrays shorter than 1 are already sorted 
if(size > 1){ 
    int middle = size/2, i; 
    long long *left, *right; 
    left = arr; 
    right = arr + middle; 

    left = merge_sort(left, middle); 
    right = merge_sort(right, size-middle); 
    return merge(left,right); 
}else { return arr; } 
} 

long long *merge(long long * left, long long * right){ 

} 

回答

7

您必須聲明你的函數merge以上merge_sort;當編譯器看到對尚未聲明的函數的調用時,它會自動假定它返回一個int

// forward declaration 
long long *merge(long long * left, long long * right); 

long long *merge_sort(long long * arr, int size){ 
// Arrays shorter than 1 are already sorted 
if(size > 1){ 
    int middle = size/2, i; 
    long long *left, *right; 
    left = arr; 
    right = arr + middle; 

    left = merge_sort(left, middle); 
    right = merge_sort(right, size-middle); 
    return merge(left,right); 
}else { return arr; } 
} 

long long *merge(long long * left, long long * right){ 

} 
+0

哇,這麼簡單的錯誤。謝謝你 – Shane 2012-02-19 23:20:23