2010-10-31 117 views
7

當試圖編譯我的VS2008 C++項目時使用<winsock2.h>來重新定義&語法錯誤的堆(105)。運行Windows 7 64位。 我已經搜索和搜索,答案似乎很統一,但它似乎並沒有爲我工作。VS2008編譯錯誤<winsock2.h>

試過在#include <windows.h>之前放#include <winsock2.h>。還嘗試不包括<windows.h>(因爲winsock2如果缺失,它會自動包含它)。

以前試過#define WIN32_LEAN_AND_MEAN和/或#define _WINSOCKAPI_

在鏈接器 - >附加依賴項中,我引用了ws2_32.lib。 也試過#pragma comment(lib, "ws2_32.lib")

爲了以防萬一,我重建了整個解決方案。

常見錯誤(由許多共同似乎):

Error 5 error C2011: 'sockaddr' : 'struct' type redefinition c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h 206 RallyAction 
Error 6 error C2143: syntax error : missing '}' before 'constant' c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h 384 RallyAction 
Error 7 error C2143: syntax error : missing ';' before 'constant' c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h 384 RallyAction 
Error 8 error C2059: syntax error : 'constant' c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h 384 RallyAction 

...等等,等等。

任何建議,將不勝感激。

回答

12

我有一個「WinsockWrapper.h」標題,它可以幫助我確保一致性......它的要點是:

#ifndef _WINDOWS_ 
#define WIN32_LEAN_AND_MEAN 
#include <windows.h> 
#undef WIN32_LEAN_AND_MEAN 
#endif 

#include <winsock2.h> 

#pragma comment(lib, "ws2_32.lib") 

別的可能拉WINDOWS.H在需要winsock2.h

此,恕我直言意味着把它在需要winsock2.h大多數文件的頂部的任何文件之前,先這個..

確保你的預編譯頭如果你正在使用它,也首先有這個。

1

這是一個衆所周知的問題。不知何故,MS使winsock.h和winsock2.h不兼容。從MSVC 6

存在這個問題,只是你有還包括WINSOCK.H,而你後面的包含winsock2.h

一個解決這個問題首先包括winsock2.h方式中的一個文件。即使WINDOWS.H之前(它會自動包括WINDOWS.H)

2

原來< WINDOWS.H>在別處項目稱爲(單獨的.h文件中),並在上面的.h文件中。這就是我很晚纔得到的編碼。感謝您的幫助,感激。

我替換了那個< windows.h>用<調用winsock2.h>,它現在工作正常。

包括< mmsystem.h>然後開始隨機給我的問題,雖然(每隔一個編譯)。我用#ifdef _WIN32封裝了它,但它仍然是隨機的。在上次編譯成功(每隔一段時間)之後保存項目並重新啓動VS2008似乎已經「修復」了它。該錯誤是一個內部鏈接器錯誤(得到了mms庫引用)。