據我所知,編譯階段相互之間沒有任何關係。你能解釋爲什麼我有那麼奇怪的行爲:在一個A.cpp(實際上不使用socket api並且不包括winsock2.h)中包含windows.h之後,在編譯ANOTHER B.cpp時出錯winsock2.h winsock.h衝突。這個B.cpp根本沒有改變。提前致謝。C++:編譯單元獨立性和舊winsock2.h類型重定義錯誤
編輯:它實際上是一個編譯而不是鏈接錯誤。我已經把MSVC編譯器在詳細模式在這裏頭包括樹:
2>perfomancemeter.cpp
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\numeric
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\iterator
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\xutility
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\climits
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\yvals.h
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\crtdefs.h
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\sal.h
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\crtassem.h
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\vadefs.h
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\use_ansi.h
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\limits.h
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\crtdefs.h
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\utility
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\iosfwd
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\cstdio
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\stdio.h
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\crtdefs.h
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\swprintf.inl
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\cstring
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\string.h
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\crtdefs.h
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\cwchar
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\wchar.h
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\crtdefs.h
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\wtime.inl
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\xstddef
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\cstddef
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\stddef.h
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\crtdefs.h
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\crtdbg.h
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\crtdefs.h
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\algorithm
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\memory
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\xmemory
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\cstdlib
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\stdlib.h
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\crtdefs.h
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\exception
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\eh.h
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\crtdefs.h
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\malloc.h
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\crtdefs.h
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\new
2>Note: including file: d:\repos\cbs\billing\common\perfomancemeter.h
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\vector
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\stdexcept
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\xstring
2>Note: including file: d:\repos\cbs\billing\common\util.h
2>Note: including file: d:\repos\cbs\billing\common\framework\include\types/types.h
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\string
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\istream
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\ostream
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\ios
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\xlocnum
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\streambuf
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\xiosbase
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\xlocale
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\typeinfo
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\xdebug
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\xlocinfo
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\xlocinfo.h
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\ctype.h
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\crtdefs.h
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\locale.h
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\crtdefs.h
1>c:\program files (x86)\microsoft visual studio 8\vc\platformsdk\include\winsock2.h(112) : error C2011: 'fd_set' : 'struct' type redefinition
1> c:\program files (x86)\microsoft visual studio 8\vc\platformsdk\include\winsock.h(54) : see declaration of 'fd_set'
我之前遇到過這個問題,知道 的#define WIN32_LEAN_AND_MEAN 包括之前Windows頭修復它。但爲什麼在這種情況下發生?
無論是'.cpp'文件之一包括其他的,你所描述不準確的情況(例如,你居然中得到錯誤鏈接,而不是編譯),或者非常奇怪的事情正在發生。更多細節將會有所幫助,例如確切的錯誤信息。 –
什麼是錯誤?如果你確實分別編譯A和B,是的,他們沒有理由相互衝突。我相信你實際上在做的是編譯它們,然後將它們連接起來,最後你會看到一個鏈接器錯誤,但是因爲你沒有提到實際的錯誤,它只是一個無法測試的理論。 – Omaha
沒有人這是一個彙編錯誤我在原有的問題中添加了詳細信息 –