簡體   English   中英

C編譯 - “未定義引用”?

[英]C compiling - “undefined reference to”?

我正在制作一個可靠的數據傳輸協議並擁有功能原型

void tolayer5(int, char data[]);

隨着structs

struct msg {
  char data[20];
};

struct pkt {
   int seqnum;
   int acknum;
   int checksum;
   char payload[20];
};

當我以這種格式調用函數時:

tolayer5(A, packet.payload);

其中A是一個intpacket.payload是一個struct pkt ,我得到錯誤“未定義引用'tolayer5(int, char*)' 。你能幫我看看我在這里缺少什么嗎?

void tolayer5(int AorB, char data[])
{
  int i;
  if (TRACE>2)
  {
     printf("TOLAYER5: data received:");
     for (i=0; i<20; i++)
        printf("%c",data[i]);
     printf("\n");
  }
}

謝謝大家幫忙解決原始問題! :)然而,當我試圖修復那個時,我遇到了一個無限循環,我認為這與我在一個數組中錯誤地解決字符有關(這已經有一段時間了,因為我已經完成了這樣的C你能幫助我嗎?找到我在創建無限循環的地方?

我已經將上面的代碼更新為我正在使用的內容。 注意主要的變化是我的功能:

void tolayer5(int AorB, char data[])

並且函數內的這一行: printf("%c",msgReceived.data[i]); 從現在開始它只是:

printf("%c",data[i]);

似乎你需要鏈接到實現tolayer5()的obj文件

更新:您的函數聲明與實現不匹配:

      void tolayer5(int AorB, struct msg msgReceived)
      void tolayer5(int, char data[])

因此編譯器會將它們視為兩個不同的函數(您使用的是c ++)。 它找不到你在main()中調用的實現。

確保將tolayer5函數聲明為原型,或者在您使用它的文件的前面定義完整的函數定義。

正如其他一些人所說,這是一個鏈接錯誤。 調用此函數的代碼部分不知道此函數是什么。 它需要在頭文件中聲明,在自己的源文件中定義,或者在相同的源文件中定義或聲明,在它被調用的位置。

編輯:在舊版本的C,C89 / C90中,實際上並不需要函數聲明。 因此,您可以在您正在使用該函數的文件中的任何位置添加定義,即使在調用之后,編譯器也會推斷出聲明。 例如,

int main()
{
  int a = func();
}

int func()
{
   return 1;
}

但是,這不是今天的好習慣,大多數語言,例如C ++,都不允許這樣做。 在您使用它的同一源文件中定義函數的一種方法是在文件的開頭聲明它。 所以,前面的例子將會是這樣的。

int func();

int main()
{
   int a = func();
}

int func()
{
  return 1;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM