windows.h与winsock2.h的包含顺序引起的问题
来源:互联网 发布:php curl exec 超时 编辑:程序博客网 时间:2024/04/30 18:41
使用环境:
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的链接库文件问题
- 黑马程序员:7K面试题之银行业务调度系统
- LeetCode-Distinct Subsequences
- android滑动之Scroller
- alter session set current_schema=Schema
- storm博客收藏
- windows.h与winsock2.h的包含顺序引起的问题
- 最长回文子串(中间扩展法)
- 黑马程序员_网络编程
- POJ 1611 The Suspects
- leetcode Word Break II
- 复合语句,
- Python 定时任务设计
- jQuery jQuery.fx.off 属性
- LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt