WinSock2.h(109) : error C2011: 'fd_set' : 'struct' type redefinition
2016-10-26 16:21
337 查看
C:\Program Files (x86)\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(109) : error C2011: 'fd_set' : 'struct' type redefinition
C:\Program Files (x86)\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock.h(54) : see declaration of 'fd_set'
C:\Program Files (x86)\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(144) : warning C4005: 'FD_SET' : macro redefinition
C:\Program Files (x86)\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock.h(88) : see previous definition of 'FD_SET'
C:\Program Files (x86)\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(153) : error C2011: 'timeval' : 'struct' type redefinition
C:\Program Files (x86)\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock.h(97) : see declaration of 'timeval'
首先说明这个问题由于重复定义引起的编译错误。
先说明解决方法,然后再说是什么原因导致了这个问题。
解决方法:
下列任何一种方法都可以。
1. 在所有包含windows.h的代码之前加上
#define WIN32_LEAN_AND_MEAN
2. 或者直接在工程的properties( vc6 以上)/Setting(vc6) -> c/c++ -> preprocessor 中添加WIN32_LEAN_AND_MEAN
问题根由:
因为windows.h中包含了<winsock.h>,这个是早期版本(windows socket 1.1)的windows socket 的头文件,而当你自己的文件中因使用最新版本windows socket的函数,需要包含 winsock2.h。而这两个版本都定义fd_set一系列的结构和函数,所以就出现这样的问题。
好,我们看下windows.h的定义,其实看一下这个定义就知道导致问题的原因和解决问题的方法:
#ifndef WIN32_LEAN_AND_MEAN
#include <cderr.h>
#include <dde.h>
#include <ddeml.h>
#include <dlgs.h>
#ifndef _MAC
#include <lzexpand.h>
#include <mmsystem.h>
#include <nb30.h>
#include <rpc.h>
#endif
#include <shellapi.h>
#ifndef _MAC
#include <winperf.h>
#include <winsock.h>
#endif
#ifndef NOCRYPT
#include <wincrypt.h>
#include <winefs.h>
#include <winscard.h>
#endif
注意查看我加粗的两行。
分类: c++
C:\Program Files (x86)\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock.h(54) : see declaration of 'fd_set'
C:\Program Files (x86)\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(144) : warning C4005: 'FD_SET' : macro redefinition
C:\Program Files (x86)\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock.h(88) : see previous definition of 'FD_SET'
C:\Program Files (x86)\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(153) : error C2011: 'timeval' : 'struct' type redefinition
C:\Program Files (x86)\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock.h(97) : see declaration of 'timeval'
首先说明这个问题由于重复定义引起的编译错误。
先说明解决方法,然后再说是什么原因导致了这个问题。
解决方法:
下列任何一种方法都可以。
1. 在所有包含windows.h的代码之前加上
#define WIN32_LEAN_AND_MEAN
2. 或者直接在工程的properties( vc6 以上)/Setting(vc6) -> c/c++ -> preprocessor 中添加WIN32_LEAN_AND_MEAN
问题根由:
因为windows.h中包含了<winsock.h>,这个是早期版本(windows socket 1.1)的windows socket 的头文件,而当你自己的文件中因使用最新版本windows socket的函数,需要包含 winsock2.h。而这两个版本都定义fd_set一系列的结构和函数,所以就出现这样的问题。
好,我们看下windows.h的定义,其实看一下这个定义就知道导致问题的原因和解决问题的方法:
#ifndef WIN32_LEAN_AND_MEAN
#include <cderr.h>
#include <dde.h>
#include <ddeml.h>
#include <dlgs.h>
#ifndef _MAC
#include <lzexpand.h>
#include <mmsystem.h>
#include <nb30.h>
#include <rpc.h>
#endif
#include <shellapi.h>
#ifndef _MAC
#include <winperf.h>
#include <winsock.h>
#endif
#ifndef NOCRYPT
#include <wincrypt.h>
#include <winefs.h>
#include <winscard.h>
#endif
注意查看我加粗的两行。
分类: c++
相关文章推荐
- error C2011: 'fd_set' : 'struct' type redefinition 。。。
- error C2011: 'fd_set' : 'struct' type redefinition的错误处理
- error C2011: 'fd_set' : 'struct' type redefinition 的原因(转)
- error C2011: “fd_set”: “struct”类型重定义
- vc6中 error C2011: 'fd_set' : 'struct' type redefiniti...
- error C2011: 'fd_set' : 'struct' type redefinition问题
- 同时使用afxsock.h及winsock2.h的方法 error C2011: 'fd_set' : 'struct' type redefinition的问题
- VS2010包含windows.h时winsock2.h出现"fd_set":struct类型重定义
- VS2010包含windows.h时winsock2.h出现"fd_set":struct类型重定义
- VS2010包含windows.h时winsock2.h出现"fd_set":struct类型重定义
- error C2011: “Picture”:“struct”类型重定义
- 解决error C2011: 'fd_set' : 'struct' type redefinition的方法
- VS2010,error C2011: “Font”:“struct”类型重定义
- 解决error C2011: 'fd_set' : 'struct' type redefinition的方法
- select 和 struct fd_set
- error C2011: “timespec”:“struct”类型重定义
- VS2013 error C2011: “s_buffer”:“struct”类型重定义
- 解决error C2011: 'fd_set' : 'struct' type redefinition的方法
- 解决error C2011: 'fd_set' : 'struct' type redefinition的方法
- 解决error C2011: 'fd_set' : 'struct' type redefinition的方法