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 唉 

  • 相关阅读:
    JavaScript Patterns 5.7 Object Constants
    JavaScript Patterns 5.6 Static Members
    JavaScript Patterns 5.5 Sandbox Pattern
    JavaScript Patterns 5.4 Module Pattern
    JavaScript Patterns 5.3 Private Properties and Methods
    JavaScript Patterns 5.2 Declaring Dependencies
    JavaScript Patterns 5.1 Namespace Pattern
    JavaScript Patterns 4.10 Curry
    【Android】如何快速构建Android Demo
    【Android】如何实现ButterKnife
  • 原文地址:https://www.cnblogs.com/davytitan/p/4446569.html
Copyright © 2011-2022 走看看