在visual studio 2010中生成错误C++

问题描述:

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://*.com/questions/11726958/cant-include-winsock2-h-in-msvc-2010 – lordkain 2014-09-23 08:19:28

我得到了它在下列方式解决。请让我知道任何其他意见: -

错误消息显示,第一个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 

由于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