解决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>这样就避免了重复定义头文件的错误。
实际上可以直接 定义 宏 WIN32_LEAN_AND_MEAN ,就可以取消 winsock.h的使用了
这是 C/c++里 最烦心的头文件位置问题.....o(︶︿︶)o 唉
解决VS2010中winsock.h与winsock2.h冲突(重复定义)——转载的更多相关文章
- VS2013使用winsock.h和winsock2.h发生冲突后的终极解决方法
问题:彻底无语了,不小心某个文件包含了windows.h头文件,而windows.h文件里面包含着winsock.h文件, 如果你下次使用winsock2.h文件时,位置不对,然后编译器会给你一大堆重 ...
- 【VS开发】winsock 错误多 windows.h和winsock2.h的顺序
Windows平台下用C++做网络开发很多时候都会同时包含这两个头文件,如若顺序不当(windows.h先于winsock2.h)就会出现很多莫名其妙的错误.诸如: c:\program files ...
- windows.h和winsock2.h包含顺序问题(转)
windows.h和winsock2.h有类型重定义我是知道的,本来就一个库来说没问题,把winsock2放到windows.h前或先定义WIN32_LEAN_AND_MEAN都能解决问题但现的出了问 ...
- windows.h和WinSock2.h出现重定义API
有两种常用的解决方法:1.把WinSock2.h写在windows.h之前 2.使用宏定义#define WIN32_LEAN_AND_MEAN
- winsock.h与winsock2.h出现重定义或不同的链接
经常遇到编译socket程序的时候生成几百个错误 以下是出错后的错误信息: >c:\program files\microsoft sdks\windows\v6.0a\include\ws2d ...
- 解决VS2010中产生的ipch文件夹和sdf文件
纯粹参考他人博文,转载时注明参考链接!!! 参考链接: http://blog.sina.com.cn/s/blog_707a4cbf0100r5jq.html 在VS2010开发的项目中,ipch文 ...
- keil C51中建立多文件时,变量重复定义的解决
c/c++语言中有很多地方要用到extern,但是如果没有真正的了解它的意义,会给编程带来很大的麻烦,为了使大家少走弯路,特祥细的说明一下. 对于比较小的程序,一般只有一个c文件和一个头文件,全局变量 ...
- vs2010 中无法打开 源文件 "stdafx.h" 未定义标识符 “xxx”
解决方案: 项目属性->配置属性->C/C++->常规->附加包含目录->$(ProjectDir)
- 解决VS2010中在项目上右键鼠标,无“添加STS引用”菜单的问题
解决方法:将Windows Identity Foundation SDK文件夹C:\Program Files (x86)\Windows Identity Foundation SDK\v3.5\ ...
随机推荐
- BGP多线单IP技术实现形式以及其他双线对比
自从电信与网通分离之后,北方网通与南方电信网络的互联瓶颈问题一直没有得到很好的解决,这个问题也严重困扰广大的ICP服务商.ICP也只能根据自己网站主流用户群是在南方还是在北方,服务重点是在南方还是北方 ...
- HDU 3294 Girls' research
题目地址 manacher #include<cstdio> #include<string.h> #include<algorithm> using namesp ...
- studio_svn
最新升级IDEA12到13版本,升级后发现IDEA中SVN无法正常使用,但文件夹下能够正常使用. 并且报错:svn: E204899: Cannot run program "svn&quo ...
- win10 Qt 调试器未设置
安装win10后一直用vs调试,没有用qt调试,这次启动调试,发现提示调试器未设置. 解决办法: 需要重新安装wdk 10 https://developer.microsoft.com/zh-cn/ ...
- 学习【Web前端开发修炼之道】总结
网页布局 1.申明文档模式 2.设置css标签重置,避免各浏览器解析不同. 3.网页css模块划分,base.css,common.css,page.css 4.低权重原则---避免滥用子选择器 cs ...
- echarts样式修改
本人是查看如下链接: http://down.admin5.com/demo/code_pop/cs/dsj/doc/example/themeDesigner.html# 图示很简洁明了.
- apue学习记录——配置apue.3e,实现P4‘ls例子
#include"apue.h" #include<dirent.h> int main(int argc,char *argv[]) { DIR *dp; struc ...
- FlatBuffers入门
1.下载flatbuffers 从https://github.com/google/flatbuffers地址下载flatbuffers-master.zip文件. 2.编译flatbuffers ...
- 二十七、oracle 例外
一.例外分类oracle将例外分为预定义例外.非预定义例外和自定义例外三种.1).预定义例外用于处理常见的oracle错误.2).非预定义例外用于处理预定义例外不能处理的例外.3).自定义例外用于处理 ...
- 【.NET】发送Email
首先,在web.config的appSettings配置一下. <appSettings> <add key="FromMail" value="xxx ...