2014-09-23 150 views
0
Error 33 error C2375: 'accept' : redefinition; different linkage C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock2.h 1578 
Error 34 error C2375: 'bind' : redefinition; different linkage C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock2.h 1600 
Error 35 error C2375: 'closesocket' : redefinition; different linkage C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock2.h 1619 
Error 36 error C2375: 'connect' : redefinition; different linkage C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock2.h 1638 
Error 37 error C2375: 'ioctlsocket' : redefinition; different linkage C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock2.h 1659 
Error 38 error C2375: 'getpeername' : redefinition; different linkage C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock2.h 1680 
Error 39 error C2375: 'getsockname' : redefinition; different linkage C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock2.h 1701 
Error 40 error C2375: 'getsockopt' : redefinition; different linkage C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock2.h 1724 
Error 41 error C2375: 'htonl' : redefinition; different linkage C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock2.h 1745 
Error 42 error C2375: 'htons' : redefinition; different linkage C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock2.h 1762 
Error 43 error C2375: 'inet_addr' : redefinition; different linkage C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock2.h 1780 
Error 44 error C2375: 'inet_ntoa' : redefinition; different linkage C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock2.h 1797 
Error 45 error C2375: 'listen' : redefinition; different linkage C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock2.h 1815 

這些是我在準備構建我的項目時遇到的錯誤。我從我的搜索中發現,這可能是由於在包含winsock2之前包含windows.h。 但我沒有直接包含任何這些文件。預先感謝您的幫助。在visual studio 2010中生成錯誤C++

+0

看看項目設置。 – lordkain 2014-09-23 07:34:39

+0

@lordkain是的,它也包括我也知道它的相關性。 「#include 」由zmq.h使用,因此無法刪除它。前進的方向是什麼。 – ravi 2014-09-23 07:56:31

+1

也許這可以幫助你http://stackoverflow.com/questions/11726958/cant-include-winsock2-h-in-msvc-2010 – lordkain 2014-09-23 08:19:28

回答

2

我得到了它在下列方式解決。請讓我知道任何其他意見: -

錯誤消息顯示,第一個winsock被包括在內,然後winsock2包括在內。由於編譯器提出了重定義錯誤(因爲編譯器已經遇到這些結構)。

我在下面的方式改變包含的次序: -

早些時候: -

#ifndef __ZMQ_H_INCLUDED__ 
#define __ZMQ_H_INCLUDED__ 

#ifdef __cplusplus 
extern "C" { 
#endif 
#if !defined WINCE 
#include <errno.h> 
#endif 
#include <stddef.h> 
#include <stdio.h> 
#if defined _WIN32 
#include <winsock2.h>       
#endif 

After:- 

#ifndef __ZMQ_H_INCLUDED__ 
#define __ZMQ_H_INCLUDED__ 

#ifdef __cplusplus 
extern "C" { 
#endif 
#if !defined WINCE 
#include <errno.h> 
#endif 
#include <stddef.h> 
#include <stdio.h> 
#if defined _WIN32 
#ifndef _WINSOCKAPI_        //ADDED 
#include <winsock2.h>       
#endif           //ADDED 
#endif 
2

由於windows.h包含winsock.h(winsock2.h的舊版本),因此您必須先放置winsock2.h(或包含winsock2.h的任何文件(在本例中爲zmq.h))行:

#include <windows.h> 

正確的順序是這樣的:

. 
. 
#include "zmq.h" 
. 
. 
#include <windows.h> 
+0

仍然得到同樣的問題 – ravi 2014-09-23 08:57:31

+0

試「的#define _WINSOCKAPI_」前「的#include 」 – 2014-09-23 10:03:34

+0

還是行不通。 – ravi 2014-09-23 10:18:20