zoukankan      html  css  js  c++  java
  • 解决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' 

    [原因分析]  
          主要原因是因为<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>这样就避免了重复定义头文件的错误。

  • 相关阅读:
    php多态
    ssl certificate problem: self signed certificate in certificate chain
    test plugin
    open specific port on ubuntu
    junit vs testng
    jersey rest service
    toast master
    use curl to test java webservice
    update folder access
    elk
  • 原文地址:https://www.cnblogs.com/xiehy/p/3317411.html
Copyright © 2011-2022 走看看