解决VS2010中winsock.h与winsock2.h冲突(重复定义)——转载

解决VS2010中winsock.h与winsock2.h冲突(重复定义)——转载

当这两个头文件顺序颠倒时,编译会出现许多莫名其妙的错误,错误如下:

1>…\include\ws2def.h(91) : warning C4005: ‘AF_IPX‘ : macro redefinition 
1>…\include\winsock.h(460) : see previous definition of ‘AF_IPX‘

或者这个错误

#error "ws2tcpip.h is not compatible with winsock.h. Include winsock2.h instead."

[原因分析]  
      主要原因是因为<Windows.h>中包含了<Winsock.h>头文件,由于其版本的不同,导致出现上述的错误。<Windows.h>中相关代码如下: 
               #ifndef WIN32_LEAN_AND_MEAN 
               #include <cderr.h> 
               #include <dde.h> 
               #include <ddeml.h> 
               ........ 
                #ifndef _MAC 
               #include <winperf.h> 
               #include <winsock.h> 
               #endif 
                ....... 
               #include <commdlg.h> 
               #endif 
               #endif

由以上代码可以看出如果在没有定义WIN32_LEAN_AND_MEAN宏的大前提下Windows.h有可能包含Winsock.h 头文件,而我们要用的头文件为 <Winsock2.h>,那么Windows.h中的<Winsock.h>和我们需要的不是一个版本,所以会有以上的错误。

[解决方案]  

很简单,在当前工程(就是编译不过的这个工程)所有include语句最前面加上#include <Winsock2.h>这样就避免了重复定义头文件的错误。

这是 C/c++里 最烦心的头文件位置问题.....o(︶︿︶)o 唉

时间: 2024-08-29 08:22:28

解决VS2010中winsock.h与winsock2.h冲突(重复定义)——转载的相关文章

VS2013使用winsock.h和winsock2.h发生冲突后的终极解决方法

问题:彻底无语了,不小心某个文件包含了windows.h头文件,而windows.h文件里面包含着winsock.h文件, 如果你下次使用winsock2.h文件时,位置不对,然后编译器会给你一大堆重定义错误问题. 初级解决办法: 把winsock2.h文件放在任何可能包含winsock.h文件(尤其是windows.h文件,它就包含了winsock.h文件)的前面,因为winsock2.h头文件有这样的宏定义: #ifndef _WINSOCK2API_#define _WINSOCK2API

解决ECSHOP中transport.js和jquery的冲突

ecshop模板兼容jquery问题, 一直是困扰开发人员的棘手问题,主要原因是 transprot.js  文件中, 大概 580行到590行之间,这个句用于格式化json,他重写了object的结构,导致于js框架冲突.冲突的原因是jquery给一个object增加了很多元素,那么在Object.prototype.toJSONString = function () 这个函数中 for (k in this) 语句中进行了无数次的循环,导致网页很卡,并且在IE中会报错. ecshop开发中

解决侧滑中ViewPager和SlidingMenu的滑动冲突

当我们在使用开源框架SlidingMenu时,如果要是使用到ViewPager,就会出现滑动冲突. 解决方案: }/** 解决ViewPager和侧滑冲突 */ public void changeSlidingMenuTOUCHMODE(int arg0) { switch (arg0) { case 0: if (getActivity() instanceof SlidingFragmentActivity) { SlidingFragmentActivity activity = (Sl

#include &lt;winsock2.h&gt;报错的问题

#define PORT 5150 #define DATA_BUFSIZE 8192 typedef struct _SOCKET_INFORMATION { CHAR Buffer[DATA_BUFSIZE]; WSABUF DataBuf; SOCKET Socket; WSAOVERLAPPED Overlapped; DWORD BytesSEND; DWORD BytesRECV; } SOCKET_INFORMATION, * LPSOCKET_INFORMATION; DWORD

Objective-C中常量重复定义的解决方案

今天在项目中用到一些常用的字符串,于是我直接创建了一个constant.h文件用#define来定义. 后来在网上看各位大神都建议用字符串常量来定义,于是我把所有的宏定义都换成了NSString * const,比如NSString * const LTNNextStep = @"下一步"; 该.h文件主要在两个类中使用,但是#import该文件后发现了一个链接问题: ld:11 duplicate symbols for architecture x86_64 clang: erro

VS2010中&lt;无法打开包括文件:“iostream.h”:&gt;错误解决方法

C/C++ code? 1 2 #include <iostream.h> 改为: C/C++ code? 1 2 #include <iostream> using namespace std; VS2010中<无法打开包括文件:"iostream.h":>错误解决方法

解决VS 中 出现致命错误 RC1015: 无法打开包含文件 &#39;afxres.h&#39; 问题

在试用VS2010时一个问题困扰了我,就是打开c++项目后,rc的dialog进不去,没法拖控件,把我给抓狂的...而且网上大部分说的都是Directions的问题..我的问题明显不是这个问题. 于是我就抓狂了,最后好不容易找到了解决办法,出错原因是因为不小心把aps文件给删掉了,只需要手动用vs执行一下.rc文件(直接找到目录双击打开即可),就会自动生成相对应的.aps文件. 出现.aps之后,项目就可以正常了! 请叫我红领巾! 解决VS 中 出现致命错误 RC1015: 无法打开包含文件 '

JNI在eclipse中出现Unresolved inclusion: &lt;jni.h&gt;或Type &#39;jint&#39; could not be resolved等解决方法

在eclipse中经常出现这类错误,include文件报错或者是jint,jclass,JNIEnv could not be resolved等,但可以编译通过,可以经过这个步骤消除这些错误或警告 1. 打开.project,删除cdt部分 <buildSpec> <buildCommand> <name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name> <triggers>cl

解决UNIX环境高级变成中找不到apue.h问题

转自:http://www.xitongbuluo.com/jiaocheng/17264.html 在http://download.csdn.net/detail/lincoln_2012/7680675 下载apue.h文件 /**************************************************************************************************************/ apue.h文件是书中自己写的一个文件,包