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的前面

  • 相关阅读:
    关于idea的目录, mybatis里mapper无法用resource获取 和 驼峰命令规则
    直接调用类方法 和 new再调用方法 的区别
    腾讯笔试题
    linux安装包
    centos 学习笔记一
    putty链接l虚拟机linux centos
    单链表的一般处理(C语言)
    华为2011机试题
    【转】函数返回类型为指针类型时的一些问题
    在 Windows Server 2012 上安装 dotNET Framework v3.5
  • 原文地址:https://www.cnblogs.com/k1988/p/2165695.html
Copyright © 2011-2022 走看看