2014-04-17 36 views
-1

我一直在學校使用相同的代碼數週。我不知道我做了什麼修復了這些問題,我所知道的是,無論何時添加代碼,他們都會馬上回來。我已經閱讀了MSDN上的所有內容,我已經閱讀了幾乎所有關於鏈接器和設置的東西,但我仍然不知道。請幫幫我。我知道問題是連接器沒有將頭文件連接到庫?錯誤LNK2019。未解決的外部。請教我什麼,我搞砸了。

int TCPEchoed(SOCKET fd){ 
    char buf[BUFSIZE]; 
    int clientData; 
    clientData = recv(fd, buf, sizeof buf, 0); 
    while (clientData != SOCKET_ERROR && clientData > 0) 
    { 
     buf[clientData] = '\0'; 
     fprintf(stderr, buf); 
     clientData = recv(fd, buf, sizeof buf, 0); 
    } 
    if (clientData == SOCKET_ERROR) 
    { 
     fprintf(stderr, "echo recv error: %d\n", GetLastError()); 
    } 
    closesocket(fd); 
    return 0; 
} 

這是導致可怕錯誤的最新功能。 「錯誤LNK2019:在函數」void __cdecl TCPecho(char const *,char const *)「(?TCPecho @@ YAXPBD0 @ Z)中引用的無法解析的外部符號」int __cdecl TCPechoed(unsigned int)「(?TCPechoed @@ YAHI @ Z) )「

我移動的東西,我能夠發現錯誤是由這一行引起的。

_beginthread((void (*)(void *))TCPechoed, STKSIZE, (void *)s); 

當我折騰到主函數,我得到的錯誤發生在主函數。我在上面所申報的功能:

int TCPechoed(SOCKET fd); 

我希望如果有人能幫助我在這個問題上,並教我它是什麼,是哪裏錯了,所以我從來沒有再次發佈關於這一點。

謝謝。

+1

您的定義使用函數名稱'TCPEchoed'(注意大寫「E」)。鏈接器正在尋找一個小寫「e」的函數。 – Lilshieste

+0

注意鑄造函數是未定義的,至少在C++中。您應該使用具有適當簽名的函數,並將其參數放在函數內部。如果你在一個很有可能發生'sizeof(SOCKET)!= sizeof(void *)'的平臺上發生,你最終會產生很多奇怪的錯誤。 – molbdnilo

回答

2

C和C++區分大小寫。您用小寫字母E聲明瞭TCPechoed,但實際功能名稱爲TCPEchoed,大寫字母E.您需要修正其中一個。

+1

哦,我的上帝......我只注意到......我是個白癡。謝謝 – Brian5193

相關問題