windows.h与winsock2.h的包含顺序引起的问题
来源:互联网 发布:淘宝代销怎么上架宝贝 编辑:程序博客网 时间:2024/04/30 08:21
使用环境:
Windows、C++
错误描述:
在项目中用到套接字和线程,对应包含头文件 #include <winsock2.h>和#include <windows.h>
但是在编译的时候碰到很多错误,而且几乎都是“ 类型/链接重定义 ”、“ 找不到标识符 ”之类的错误,而且几乎都出现在 winsock2.h和ws2def.h 中;
例如:
error C2011: “sockaddr_in”:“struct”类型重定义 ws2def.h
error C2375: “accept”: 重定义;不同的链接 winsock2.h
error C3861: “socket”: 找不到标识符 server.cpp
错误原因:
做网络开发很多时候都会同时包含头文件
#include <winsock2.h>
#include <windows.h>
如若顺序不当( windows.h 先于 winsock2.h )就会出现很多莫名其妙的错误。
原因在于:windows.h中包含了winsock.h 头文件,而winsock2.h 中的很多内容会与 winsock.h 中的内容相同,从而导致类型的重定义(winsock2.h是winsock.h的后期版本)
解决办法:
看如下内容可知,如果没有定义宏 WIN32_LEAN_AND_MEAN,则会在windows.h中包含winsock.h
因此,解决办法:
在包含<windows.h>之前定义WIN32_LEAN_AND_MEAN宏,如
下所示:
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
补充:
windows.h中有如下内容:
#ifndef WIN32_LEAN_AND_MEAN
#include <cderr.h>
#include <dde.h>
#include <ddeml.h>
#include <dlgs.h>
#ifndef _MAC
#include <lzexpand.h>
#include <mmsystem.h>
#include <nb30.h>
#include <rpc.h>
#endif
#include <shellapi.h>
#ifndef _MAC
#include <winperf.h>
#if(_WIN32_WINNT >= 0x0400)
#include <winsock2.h>
#include <mswsock.h>
#else
#include <winsock.h>
#endif /* _WIN32_WINNT >= 0x0400 */
#endif
#ifndef NOCRYPT
#include <wincrypt.h>
#endif
#ifndef NOGDI
#include <commdlg.h>
#ifndef _MAC
#include <winspool.h>
#ifdef INC_OLE1
#include <ole.h>
#else
#include <ole2.h>
#endif /* !INC_OLE1 */
#endif /* !MAC */
#endif /* !NOGDI */
#endif /* WIN32_LEAN_AND_MEAN */
- windows.h与winsock2.h的包含顺序引起的问题
- windows.h与winsock2.h的包含顺序引起的问题
- windows.h与winsock2.h的包含顺序
- windows.h与winsock2.h的包含顺序
- winsock.h与winsock2.h的区别(同时包含windows.h和winsock2.h报错重定义的问题)
- windows.h与winsock2.h的引用顺序
- windows.h与winsock2.h冲突问题的解决
- winsock2.h和windows.h冲突问题的解决方案
- 【windows】套接口编程 - 包含winsock2.h的重定义问题
- winsock2.h与afxsock.h的冲突
- winsock2.h与 mysql_com.h的关系
- windows.h winsock2.h winsock.h的关系
- 【VS开发】winsock 错误多 windows.h和winsock2.h的顺序
- winsock2.h 的 recv
- Windows.h和Winsock2.h冲突问题
- winsock2.h的链接库文件问题
- #include <winsock2.h>报错的问题
- winsock2.h的链接库文件问题
- 自定义计算公式的原理
- Java中解析xml的几种方式
- 和陌生人QQ聊天
- jdk与jre的区别
- 关于RTP时间戳及多媒体通信同步的问题
- windows.h与winsock2.h的包含顺序引起的问题
- vb.net string转为日期 yyyyMM格式
- jni生成h文件
- IntelliJ IDEA中创建自己的代码模板
- 禁止刷新网页、防止刷新网页、禁止后退等操作的代码
- 《福布斯》:大数据带来高成本 Hadoop需继续完善
- request.getAttribute() 和 request.getParameter()
- java.io.IOException: Broken pipe
- 详解内核的主要配置选项