2015-02-22 3 views
-1

Я не могу получить свой runner.c, чтобы увидеть мой импорт mergesort.h, только последнее, что мне нужно сделать, прежде чем перейти и добавить комментарии.C Заголовочные файлы не работают?

Не вижу, что я делаю неправильно здесь, поэтому я подумал, что у меня будет больше глаз, чтобы посмотреть на него. Я посмотрел на вопросы здесь, а также в значительной степени скопировал шаблон моего профессора лаборатории, но он все равно не сработает.

Ошибка

/tmp/ccf8TT1E.o: In function `main': 
/home/carson/CProgs/lab5/runner.c:10: undefined reference to `mergeSort' 
/home/carson/CProgs/lab5/runner.c:11: undefined reference to `print' 
collect2: error: ld returned 1 exit status 

runner.c

#include <stdio.h> 
#include <stdlib.h> 
#include "mergesort.h" 

int main() 
{ 
    int length = 4; 
    int array[4] = {7,5,3,1}; 

    mergeSort(array, length); 
    print(array,length); 
} 

mergesort.h

#ifndef MERGESORT_H_ 
#define MERGESORT_H_ 

void mergeSort(int* x, int length); 

#endif 

mergesort.c

#include <stdio.h> 
#include <stdlib.h> 
#include "mergesort.h" 

void mergeSort(int* array, int length) 
{ 
    if(length == 2) 
    { 
     if(array[1] < array[0]) 
     { 
      swap(&array[1],&array[0]); 
     } 
     return; 
    } 
    else if(length == 1) 
    { 
     return; 
    } 
    else 
    { 
     if(length%2 == 0) 
     { 

      int halfLength = length/2; 
      int bottomHalf[halfLength]; 
      int topHalf[halfLength]; 

      int i; 
      for(i = 0; i <= (halfLength); i++) 
      { 
       bottomHalf[i] = array[i]; 
       topHalf[i] = array[i+(halfLength)]; 
      } 

      mergeSort(bottomHalf, halfLength); 
      mergeSort(topHalf, halfLength); 

      int arrayLoc = 0; 
      int bottomHalfLoc = 0; 
      int topHalfLoc = 0; 
      while(bottomHalfLoc < halfLength && topHalfLoc < halfLength) 
      { 
       if(bottomHalf[bottomHalfLoc] > topHalf[topHalfLoc]) 
       { 
        array[arrayLoc] = topHalf[topHalfLoc]; 
        topHalfLoc++; 
       } 
       else 
       { 
        array[arrayLoc] = bottomHalf[bottomHalfLoc]; 
        bottomHalfLoc++; 
       } 

       arrayLoc++; 
      } 

      if(bottomHalfLoc < arrayLoc) 
      { 
       while(bottomHalfLoc < halfLength) 
       { 
        array[arrayLoc] = bottomHalf[bottomHalfLoc]; 
        bottomHalfLoc++; 
        arrayLoc++; 
       } 
      } 

      return; 
     }else 
     { 
      int halfLength = length/2; 
      int bottomHalf[halfLength]; 
      int topHalf[halfLength+1]; 

      int i; 
      for(i = 0; i <= (halfLength); i++) 
      { 
       bottomHalf[i] = array[i]; 
      } 

      for(i = 0; i <=(halfLength+1); i++) 
      { 
       topHalf[i] = array[i+halfLength]; 
      } 

      mergeSort(bottomHalf, halfLength); 
      mergeSort(topHalf, halfLength); 

      int arrayLoc = 0; 
      int bottomHalfLoc = 0; 
      int topHalfLoc = 0; 
      while(bottomHalfLoc < halfLength && topHalfLoc < halfLength) 
      { 
       if(bottomHalf[bottomHalfLoc] > topHalf[topHalfLoc]) 
       { 
        array[arrayLoc] = topHalf[topHalfLoc]; 
        topHalfLoc++; 
       } 
       else 
       { 
        array[arrayLoc] = bottomHalf[bottomHalfLoc]; 
        bottomHalfLoc++; 
       } 

       arrayLoc++; 
      } 

      if(bottomHalfLoc < arrayLoc) 
      { 
       while(bottomHalfLoc < halfLength) 
       { 
        array[arrayLoc] = bottomHalf[bottomHalfLoc]; 
        bottomHalfLoc++; 
        arrayLoc++; 
       } 
      } 
     return; 
     } 
    } 
} 

void swap(int *smallerValue, int *largerValue) 
{ 
    int temp = *smallerValue; 
    *smallerValue = *largerValue; 
    *largerValue = temp; 
} 


void print(int array[], int length) 
{ 
    printf("%d",array[0]); 
    int i; 
    for(i = 1; i < length; i++) 
    { 
     printf(",%d",array[i]); 
    } 

    printf("\n"); 
} 
+3

Это не имеет никакого отношения к файлу заголовка, как вы вызываете команду компилятора? –

+0

Вы наблюдаете ошибку компоновщика. – alk

+0

gcc runner.c -o runner.out? – Carson

ответ

0

использование gcc *.c -o runner.out и еще одна вещь, которую я не вижу функцию печати в mergesort.h файле, но у ¨R вызова ее в главной функции. включить его или использовать extern print(array,length);

Смежные вопросы