包含winsock2.h后出现type redefinition错误
2009-12-10 09:54
176 查看
问题描述]
在包含了<windows.h>以及<winsock2.h>的工程中,编译有时会出现如
下错误:
error C2011: 'fd_set' : 'struct' type redefinition
error C2011: 'timeval' : 'struct' type redefinition
....
error C2375: 'accept' : redefinition; different linkage
[原因分析]
主要原因是因为<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 头文件,因此我们得出一个很简单
的解决方法就是在包含<windows.h>之前定义WIN32_LEAN_AND_MEAN宏,如
下所示:
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
k1988注:还有一种解决办法就是把包含winsock2.h的语句都提到包含windows.h的前面
在包含了<windows.h>以及<winsock2.h>的工程中,编译有时会出现如
下错误:
error C2011: 'fd_set' : 'struct' type redefinition
error C2011: 'timeval' : 'struct' type redefinition
....
error C2375: 'accept' : redefinition; different linkage
[原因分析]
主要原因是因为<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 头文件,因此我们得出一个很简单
的解决方法就是在包含<windows.h>之前定义WIN32_LEAN_AND_MEAN宏,如
下所示:
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
k1988注:还有一种解决办法就是把包含winsock2.h的语句都提到包含windows.h的前面
相关文章推荐
- 包含winsock2.h后出现type redefinition错误
- 使用Qt库时出现winsock2.h和windos.h包含顺序错误
- VS2010包含windows.h时winsock2.h出现"fd_set":struct类型重定义
- VS2010包含windows.h时winsock2.h出现"fd_set":struct类型重定义
- 包含winsock2.h后出现type redefinition错误
- VS2010包含windows.h时winsock2.h出现"fd_set":struct类型重定义
- 使用Qt库时出现winsock2.h和windos.h包含顺序错误
- VS2010包含windows.h时winsock2.h出现"fd_set":struct类型重定义错误处理
- 请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字
- java web中请求和响应中包含中文出现乱码解析
- maven-complier-plugin打包jar包含javadoc以及可能出现中文乱码的解决
- 对包含的文件中出现同名函数或变量的解决方法
- SQL Server首次出现在两个“所有环境”十大排名榜上(该排行包含运行于Microsoft Windows® 和非Windows环境下的所有数据库),这表明SQL Server已经跻身规模最大、行数最多的OLTP数据库之列。
- day07之包含min函数的栈+查找一个字符串中第一个只出现两次的字符
- 一个字符串中可能包含a~z中的多个字符,如有重复,如String data="aavzcadfdsfsdhshgWasdfasdf",求出现次数最多的那个字母及次数,如有多个重复的则都求出。
- 包含RecyclerView的module导入项目出现的问题
- [Jenkins] 解决 Gradle 编译包含 SVG Drawable 出现异常
- IOS引用的静态库里包含category文件出现“unrecognized selector”的解决办法
- 练习 2-5 编写函数 any(s1, s2),将字符串 s2 中的任一字符在字符串 s1 中第一次 出现的位置作为结果返回。如果 s1 中不包含 s2 中的字符,则返回-1
- CComboBox在DoDataExchange中出现两次导致选择名字包含另一个名字的选项失败