Противоречивые типы для функции и предупреждения приведения? - PullRequest
0 голосов
/ 20 февраля 2012

Я уверен, что это простой ответ для тех, кто имеет опыт работы с указателями в 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){

}

1 Ответ

7 голосов
/ 20 февраля 2012

Вам нужно объявить вашу функцию 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){

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...