zoukankan      html  css  js  c++  java
  • 包含winsock2.h后出现type redefinition错误

    问题描述]
       在包含了<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的前面

  • 相关阅读:
    JSP----获取表单参数
    application 从web.xml中获取初始化参数
    使用定时器分解任务
    无阻塞加载外部js(动态脚本元素,XMLHttpRequest注入,LazyLoad)
    ReactJs 入门DEMO(转自别人)
    带你一分钟理解闭包--js面向对象编程(转载他人)
    使用SqlBulkCopy进行批量数据插入
    AngularJsDEMO
    ECharts
    C#发送邮件DEMO
  • 原文地址:https://www.cnblogs.com/k1988/p/2165695.html
Copyright © 2011-2022 走看看