在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++
答
我得到了它在下列方式解决。请让我知道任何其他意见: -
错误消息显示,第一个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>
看看项目设置。 – lordkain 2014-09-23 07:34:39
@lordkain是的,它也包括我也知道它的相关性。 “#include”由zmq.h使用,因此无法删除它。前进的方向是什么。 –
ravi
2014-09-23 07:56:31
也许这可以帮助你http://*.com/questions/11726958/cant-include-winsock2-h-in-msvc-2010 – lordkain 2014-09-23 08:19:28