2014-04-21 61 views
0
#include <stdio.h> 
#include <stdlib.h> 

void reverse(char* lines[], int count) 
{ 
    for (int i = count-1; i >= 0; i--) 
    { 
      printf("%s", lines[i]); 
    } 
} 

主要不認識我的功能

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 
#include "sortutil.h" 
#include "reverse.h" 


int getarray(char *lines[]); 
void printarray(char *lines[], int max); 

int main(int argc, char* argv[]) 
{ 
    char* arr[100]; 
    int numlines = getarray(arr); 
    printf("There are %d lines\n", numlines); 
    printarray(arr, numlines); 


    for (int i = 1; i < argc; i++) 
    { 
      if (strcmp(argv[i], "-s") == 0) 
      { 
        sortutil(arr); 
        printarray(arr, numlines); 
      } 
      if (strcmp(argv[i], "-r") == 0) 
      { 
        reverse(arr, numlines); 
        printarray(arr, numlines); 
      } 

    } 
} 

int getarray(char *lines[]) 
{ 
    int i = 0; 
    char *text = (char *)malloc(200); 
    while (fgets(text, 200, stdin) != NULL) 
    { 
     lines[i] = text; 
     i++; 
     text = (char *)malloc(200); 
    } 
    return i; 
} 

void printarray(char *lines[], int max) 
{ 
    for (int i = 0; i < max; i++) 
    { 
     printf("%s\n\n", lines[i]); 
    } 
} 

當我編譯的主要功能,它告訴我,有一個'反向'未定義的引用。我做了#include "reverse.h",所以它應該沒有問題看到相反的功能。我錯過了什麼

+0

「reverse.h」對reverse有什麼看法?編譯或鏈接過程中發生錯誤嗎? –

+0

@Mike連接,顯然。 「未定義的參考」是一個聯繫問題。 – littleadv

回答

2

你錯過了實現。您定義了原型,但函數體本身缺失。它在一個單獨的文件中,你需要告訴鏈接器它。當你編譯main.cc時 - 將另一個文件添加到命令行中。

+0

它確實提到了鏈接器命令失敗,我將如何將其他文件添加到命令行,我會將它添加到makefile中嗎? –

+0

@ user3427042一般是。但是不知道你的makefile是怎麼樣的以及你使用的是什麼鏈接器 - 它很難告訴你如何修復它。 – littleadv

+0

以及我沒有添加sortutil.h在我的命令行,它仍然工作,我使用鏗,如果這有助於btw –