您的位置:首页 > 其它

包含winsock2.h后出现type redefinition错误

2012-07-25 09:08 204 查看
[问题描述]
   在包含了<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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  struct c
相关文章推荐