【问题标题】:redefinition errors in WinSock2.h [duplicate]WinSock2.h 中的重新定义错误 [重复]
【发布时间】:2011-08-23 16:50:01
【问题描述】:

在项目文件中包含winsock2.h。

在 -
WinSock2.h(109) : error C2011: 'fd_set' : 'struct' type redefinition
中遇到很多错误 带有对应的 -
WinSock.h(54) : see declaration of 'fd_set'

我没有看到任何标题中包含 winsock.h。

项目中是否有任何设置可能导致此问题?

编辑
但是,我在另一个文件中使用 windows.h:
http://cboard.cprogramming.com/windows-programming/41212-strange-msvc-winsock2-compile-error.html

编辑 2
在标题中我有:

#include <winsock2.h>  
#include <iphlpapi.h>
#include "\MyFiles\FileX.h" <-which #include <windows.h> 

【问题讨论】:

    标签: c++ windows visual-studio winapi networking


    【解决方案1】:

    我有根据的猜测是包含标题的顺序,即首先包含winsock2.h(第一个含义在windows.h之前),或者在包含windows.h之前定义WIN32_LEAN_AND_MEAN,这会阻止windows.h包含winsock v1。

    #include <winsock2.h>
    #include <windows.h>
    

    -或-

    #define WIN32_LEAN_AND_MEAN
    #include <windows.h>
    #include <winsock2.h>
    

    【讨论】:

    • 吉姆,我认为我包含我的其他头文件的方式,winsock2.h 会是第一个?我必须将winsock2放在另一个文件中吗? (见编辑 2)
    • 希望他们能在 Visual Studio 中永远解决这个问题!感谢您解释错误。
    • 我对 Windows API 的糟糕程度感到惊讶。
    • @Bartek:我同意。不完全是 API 本身有多糟糕,而是 SDK。
    • +1 WIN32_LEAN_AND_MEAN 拯救了我的一天 :)
    【解决方案2】:

    在有些头疼之后:我确保#include "Winsock2.h" 在任何#include "windows.h""#include "Winsock.h" 之前,这解决了这个问题。

    我检查了递归包含,我发现了包含(递归)一些#include "windows.h""#include "Winsock.h" 的头文件并写了一个#include "Winsock2.h"。在这个文件中,我添加了#include "Winsock2.h" 作为第一个包含。

    只是耐心的问题,看包括一个一个并建立这个顺序,先#include "Winsock2.h"然后#include "windows.h"

    【讨论】:

    • WIN32_LEAN_AND_MEAN 确实有效
    • @octoback 不。不在这里工作
    猜你喜欢
    • 1970-01-01
    • 2010-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-23
    • 1970-01-01
    • 2014-04-26
    • 1970-01-01
    相关资源
    最近更新 更多