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

  • 相关阅读:
    qq互联接入
    react-markdown-editor-lite 编辑器
    验证码
    vue 3的生命周期 html 的
    如何利用github搭建个人网站
    unittest系统(四)测试套件
    unittest系列(三)unittest用例如何执行
    unittest系列(二)unittest的断言
    unittest系列(一)unittest简介和示例
    命令行开启wsl并安装调试python项目
  • 原文地址:https://www.cnblogs.com/k1988/p/2165695.html
Copyright © 2011-2022 走看看