我一直在學校使用相同的代碼數週。我不知道我做了什麼修復了這些問題,我所知道的是,無論何時添加代碼,他們都會馬上回來。我已經閱讀了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);
我希望如果有人能幫助我在這個問題上,並教我它是什麼,是哪裏錯了,所以我從來沒有再次發佈關於這一點。
謝謝。
您的定義使用函數名稱'TCPEchoed'(注意大寫「E」)。鏈接器正在尋找一個小寫「e」的函數。 – Lilshieste
注意鑄造函數是未定義的,至少在C++中。您應該使用具有適當簽名的函數,並將其參數放在函數內部。如果你在一個很有可能發生'sizeof(SOCKET)!= sizeof(void *)'的平臺上發生,你最終會產生很多奇怪的錯誤。 – molbdnilo