锘??xml version="1.0" encoding="utf-8" standalone="yes"?> Solution錛?/font> This problem arises because (at least, that version of it) includes not but ; sadly when Microsoft wrote they chose neither to change to include , which replaces , nor to include from and then add the definitions for the new Winsock 2 API methods & structures (this might seem reasonable since Winsock 2 does, strictly speaking, replace Winsock 1, but since the API must be fully backwards-compatible the distinction is somewhat meaningless and there's no real benefit to making standalone). The fix is thankfully simple: always "" before . However, you must remember that if has been included by (for example) a higher-level header file that is subsequently including your header file, it's too late - so you must make sure that the higher-level header files respect this convention also. It is however rarely necessary to modify the header files of libraries or other code modules you are using just because you include their header files, and their header files include - you can just include before you include the library's header files. 鍦ㄥ寘鍚玧rtplib鏈夋椂鍊欐垜涔熼亣鍒拌繖涓棶棰橈紝瑙e喅鏂規硶涓庝箣鐩稿悓銆備竴鍙ヨ瘽錛屽湪#include<windows.h>涔嬪墠 #include <winsock2.h> 闂灝卞彲浠ヨВ鍐熾?br style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px"> 闂鎻忚堪]
1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(460) : 鍙傝“AF_IPX”鐨勫墠涓涓畾涔?br>1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(127) : warning C4005: “AF_MAX”: 瀹忛噸瀹氫箟
1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(479) : 鍙傝“AF_MAX”鐨勫墠涓涓畾涔?br>1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(163) : warning C4005: “SO_DONTLINGER”: 瀹忛噸瀹氫箟
1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(402) : 鍙傝“SO_DONTLINGER”鐨勫墠涓涓畾涔?br>1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(206) : error C2011: “sockaddr”: “struct”綾誨瀷閲嶅畾涔?br>1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(485) : 鍙傝“sockaddr”鐨勫0鏄?br>1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(384) : error C2143: 璇硶閿欒 : 緙哄皯“}”(鍦?#8220;甯擱噺”鐨勫墠闈?
1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(384) : error C2143: 璇硶閿欒 : 緙哄皯“;”(鍦?#8220;甯擱噺”鐨勫墠闈?
1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(384) : error C2059: 璇硶閿欒 : “甯擱噺”
1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(437) : error C2143: 璇硶閿欒 : 緙哄皯“;”(鍦?#8220;}”鐨勫墠闈?
1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(437) : error C4430: 緙哄皯綾誨瀷璇存槑絎?- 鍋囧畾涓?int銆傛敞鎰? C++ 涓嶆敮鎸侀粯璁?int
1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(437) : error C4430: 緙哄皯綾誨瀷璇存槑絎?- 鍋囧畾涓?int銆傛敞鎰? C++ 涓嶆敮鎸侀粯璁?int
1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(518) : warning C4005: “IN_CLASSA”: 瀹忛噸瀹氫箟
1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(287) : 鍙傝“IN_CLASSA”鐨勫墠涓涓畾涔?br>1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(524) : warning C4005: “IN_CLASSB”: 瀹忛噸瀹氫箟
1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(293) : 鍙傝“IN_CLASSB”鐨勫墠涓涓畾涔?br>1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(530) : warning C4005: “IN_CLASSC”: 瀹忛噸瀹氫箟
1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(299) : 鍙傝“IN_CLASSC”鐨勫墠涓涓畾涔?br>1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(541) : warning C4005: “INADDR_ANY”: 瀹忛噸瀹氫箟
1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(304) : 鍙傝“INADDR_ANY”鐨勫墠涓涓畾涔?br>1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(543) : warning C4005: “INADDR_BROADCAST”: 瀹忛噸瀹氫箟
1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(306) : 鍙傝“INADDR_BROADCAST”鐨勫墠涓涓畾涔?br>1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(577) : error C2011: “sockaddr_in”: “struct”綾誨瀷閲嶅畾涔?br>1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(312) : 鍙傝“sockaddr_in”鐨勫0鏄?br>1>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(132) : error C2011: “fd_set”: “struct”綾誨瀷閲嶅畾涔?br>1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(68) : 鍙傝“fd_set”鐨勫0鏄?br>1>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(167) : warning C4005: “FD_SET”: 瀹忛噸瀹氫箟
1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(102) : 鍙傝“FD_SET”鐨勫墠涓涓畾涔?br>1>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(176) : error C2011: “timeval”: “struct”綾誨瀷閲嶅畾涔?br>1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(111) : 鍙傝“timeval”鐨勫0鏄?br>
濂戒箙娌″啓TCP鐨勭▼搴忎簡錛岄兘蹇樿鏄庝箞鍥炰簨浜嗭紝闅愮害璁板緱瑙e喅鏂規硶寰堢畝鍗曘傛悳绱簡涓涓嬶紝璁板綍涓嬫潵錛?br>
寮曠敤閾炬帴錛?a >http://www.cnblogs.com/tonyyang132/archive/2009/10/14/1583110.html
鍒濈湅鍒板姝や竴鍫嗙殑閿欒濮斿疄涓嶇埥錛屼絾鏄彧瑕佸皢浜岃呯殑鍖呭惈欏哄簭璋冩崲涓涓嬮棶棰樺氨浼氳В鍐籌紝鍘熷洜鍙傝涓嬮潰閭d釜閾炬帴銆傚彟澶栵紝涓婅堪闂涓嶄粎褰卞搷鐩存帴鍖呭惈浜岃呯殑鏂囦歡錛岃繕褰卞搷闂存帴鍖呭惈鐨勬儏褰€傛瘮濡傦紝a.h鍖呭惈浜唚indows.h錛宐.h鍖呭惈浜唚insock2.h錛屽鏋滃湪c.h褰撲腑瑕佸紩鐢╝.h鍜宐.h錛岄偅涔堟紜殑欏哄簭搴斿綋鏄痓.h鍏堜簬a.h銆傚綋鐒訛紝瀹炶返褰撲腑鏈夋椂寰堥毦鎵懼埌絀剁珶鏄摢涓や釜鏂囦歡欏哄簭涓嶅浜嗭紝緇堟瀬鐨勮В鍐沖姙娉曟槸錛屽湪褰撳墠宸ョ▼錛堝氨鏄紪璇戜笉榪囩殑榪欎釜宸ョ▼錛夋墍鏈塱nclude璇彞鏈鍓嶉潰鍔犱笂#include <winsock2.h>鍜?include<windows.h>錛屼笘鐣屾竻闈欎簡銆?br style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px">
鍏充簬WINSOCK.H涓巜insock2.h涓殑閲嶅畾涔夎В鍐沖姙娉曞垎鏋?/strong>
[C++ Error] winsock.h(54): E2344 Earlier declaration of 'fd_set'
[C++ Error] winsock2.h(112): E2146 Need an identifier to declare
[C++ Warning] winsock2.h(144): W8017 Redefinition of 'FD_SET' is not identical
[C++ Error] winsock2.h(153): E2238 Multiple declaration for 'timeval'
[C++ Error] winsock.h(97): E2344 Earlier declaration of 'timeval'
[C++ Error] winsock2.h(209): E2238 Multiple declaration for 'hostent'
[C++ Error] winsock.h(153): E2344 Earlier declaration of 'hostent'
[C++ Error] winsock2.h(222): E2238 Multiple declaration for 'netent'
[C++ Error] winsock.h(166): E2344 Earlier declaration of 'netent'
[C++ Error] winsock2.h(229): E2238 Multiple declaration for 'servent'
[C++ Error] winsock.h(173): E2344 Earlier declaration of 'servent'
[C++ Error] winsock2.h(241): E2238 Multiple declaration for 'protoent'
[C++ Error] winsock.h(185): E2344 Earlier declaration of 'protoent'
[C++ Error] winsock2.h(327): E2238 Multiple declaration for 'in_addr'
[C++ Error] winsock.h(269): E2344 Earlier declaration of 'in_addr'
[C++ Error] winsock2.h(385): E2238 Multiple declaration for 'sockaddr_in'
[C++ Error] winsock.h(319): E2344 Earlier declaration of 'sockaddr_in'
[C++ Error] winsock2.h(395): E2238 Multiple declaration for 'WSAData'
[C++ Error] winsock.h(329): E2344 Earlier declaration of 'WSAData'
[C++ Error] winsock2.h(411): E2146 Need an identifier to declare
[C++ Warning] winsock2.h(455): W8017 Redefinition of 'SO_DONTLINGER' is not identical
[C++ Warning] winsock2.h(512): W8017 Redefinition of 'AF_IPX' is not identical
[C++ Warning] winsock2.h(540): W8017 Redefinition of 'AF_MAX' is not identical
[C++ Error] winsock2.h(546): E2238 Multiple declaration for 'sockaddr'
[C++ Error] winsock.h(492): E2344 Earlier declaration of 'sockaddr'
[C++ Error] winsock2.h(586): E2238 Multiple declaration for 'sockproto'
[C++ Error] winsock.h(501): E2344 Earlier declaration of 'sockproto'
[C++ Error] winsock2.h(625): E2238 Multiple declaration for 'linger'
[C++ Error] winsock2.h(625): E2228 Too many error or warning messages
鍦ㄥ寘鍚簡<windows.h>浠ュ強<winsock2.h>鐨勫伐紼嬩腑,緙栬瘧鏈夋椂浼氬嚭鐜板
涓嬮敊璇?
error C2011: 'fd_set' : 'struct' type redefinition
error C2011: 'timeval' : 'struct' type redefinition
....
error C2375: 'accept' : redefinition; different linkage
[鍘熷洜鍒嗘瀽]
涓昏鍘熷洜鏄洜涓?lt;windows.h>涓寘鍚簡<winsock.h>澶存枃浠?鐢變簬鍏剁増
鏈殑涓嶅悓錛屽鑷村嚭鐜頒笂榪扮殑閿欒銆?lt;windows.h>涓浉鍏充唬鐮佸涓?
#ifndef WIN32_LEAN_AND_MEAN
#include <cderr.h>
#include <dde.h>
#include <ddeml.h>
........
#ifndef _MAC
#include <winperf.h>
#include <winsock.h>
#endif
.......
#include <commdlg.h>
#endif
#endif
[瑙e喅鏂規]
鐢變互涓婁唬鐮佸彲浠ョ湅鍑哄鏋滃湪娌℃湁瀹氫箟WIN32_LEAN_AND_MEAN瀹?/font>鐨勫ぇ鍓?br style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px">鎻愪笅windows.h鏈夊彲鑳藉寘鍚玾insock.h 澶存枃浠訛紝鍥犳鎴戜滑寰楀嚭涓涓緢綆鍗?br style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px">鐨勮В鍐蟲柟娉曞氨鏄湪鍖呭惈<windows.h>涔嬪墠瀹氫箟WIN32_LEAN_AND_MEAN瀹?濡?br style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px">涓嬫墍紺?
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
]]>