zoukankan      html  css  js  c++  java
  • 解决VS2010中winsock.h与winsock2.h冲突(重复定义)——转载

    解决VS2010中winsock.h与winsock2.h冲突(重复定义)——转载

    当这两个头文件顺序颠倒时,编译会出现许多莫名其妙的错误,错误如下:

    1>…includews2def.h(91) : warning C4005: 'AF_IPX' : macro redefinition 
    1>…includewinsock.h(460) : see previous definition of 'AF_IPX' 

    或者这个错误

    #error "ws2tcpip.h is not compatible with winsock.h. Include winsock2.h instead."

    [原因分析]  
          主要原因是因为<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 头文件,而我们要用的头文件为 <Winsock2.h>,那么Windows.h中的<Winsock.h>和我们需要的不是一个版本,所以会有以上的错误。

    [解决方案]  

          很简单,在当前工程(就是编译不过的这个工程)所有include语句最前面加上#include <Winsock2.h>这样就避免了重复定义头文件的错误。

    实际上可以直接 定义  宏   WIN32_LEAN_AND_MEAN ,就可以取消 winsock.h的使用了

    这是 C/c++里 最烦心的头文件位置问题.....o(︶︿︶)o 唉 

  • 相关阅读:
    零点定理、介值定理
    古今数学史
    古今数学史
    StreamDM:基于Spark Streaming、支持在线学习的流式分析算法引擎
    StreamDM:基于Spark Streaming、支持在线学习的流式分析算法引擎
    随机化算法(二)
    随机化算法(二)
    机器学习算法时间复杂度的考虑
    机器学习算法时间复杂度的考虑
    matlab 工具函数、matlab toolbox(工具箱)
  • 原文地址:https://www.cnblogs.com/davytitan/p/4446569.html
Copyright © 2011-2022 走看看