解决error C2011: 'fd_set' : 'struct' type redefinition的方法

http://www.cnblogs.com/ark-zhang/archive/2013/06/19/3144383.html

首先说明这个问题由于重复定义引起的编译错误。

先说明解决方法,然后再说是什么原因导致了这个问题。

解决方法:

下列任何一种方法都可以。

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

解决error C2011: 'fd_set' : 'struct' type redefinition的方法

时间: 2024-10-29 19:05:33

解决error C2011: 'fd_set' : 'struct' type redefinition的方法的相关文章

VC中编译报错:error C2011: &#39;fd_set&#39; : &#39;struct&#39; type redefinition

这是头文件包含顺序的问题,原因与解决办法见下面代码的注释. /* 包含下面这两个头文件时,必须把winsock2.h放在前面 否则编译报错,N多的重定义错误:例如 error C2011: 'fd_set' : 'struct' type redefinition */ #include <WinSock2.h> #include <Windows.h> int main(int argc, _TCHAR* argv[]) { Sleep(1); return 0; } 其实可以不

C++ Error:C2011: &#39;struct&#39; type redefinition

C++ Error:C2011: 'struct' type redefinition 在c语言中,对同一个变量或者函数进行多次声明是不会报错的.所以如果h文件里只是进行了声明工作,即使不使用# ifndef宏定义,一个c文件多次包含同一个h文件也不会报错. 但是在c++语言中,#ifndef的作用域只是在单个文件中.所以如果h文件里定义了全局变量,即使采用#ifndef宏定义,一个c文件包含同一个h文件多次还是会出现全局变量重定义的错误. 使用#ifndef可以避免下面这种错误:如果在h文件中

fatal error C1083: Cannot open type library file: &#39;swpublished.tlb&#39;: No such file or directory 解决办法

在平台VC++2005 ,VC++2010 或是VC+2012 上使用 SolidWorks API SDK模板对Solidworks进行二次开发的时候 新建了一个项目在生成的时候总是得到下面的错误信息,现将解决办法分享出来! Error Information: Error 1 fatal error C1083: Can not open type library file: 'swpublished.tlb': No such file or directory c: \ users \

Error: Expected resource of type xxx [ResourceType]

运行环境:Android Studio 1.4 gradle版本:2.10 工程编译没有问题,并且能在模拟器和真机上正常运行,但是当打包成Apk的时候,出现了 Error:Error: Expected resource of type color [ResourceType]  这个错误,导致打包不成功. 以下是出错地方的代码: private static RadioButton createGroupTabItem(Context context, MemberType data) { R

DP备份报错 ORA-19554: error allocating device, device type: SBT_TAPE ORA-27211

环境:solaris 10,oracle 11.2.0.4  2nodes rac 症状:rman备份报错如下 RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: ======================================

解决error retriving parent for item

解决error retriving parent  for item In "android-support-v7-appcompat" project: Delete “android-support-v7-appcompat” from Package explorer. Import again and check “Copy into workspace” In Properties -> Android -> in Project build target, un

解决Error"基础连接已经关闭: 未能为SSL/TLS 安全通道建立信任关系

今天写程序的时候调用到一个第三方的DLL文件,本机调试一切都正常,但是程序不是到服务器以后一直提示一个BUG:"基础连接已经关闭: 未能为SSL/TLS 安全通道建立信任关系". 后来把DLL文件进行反编译,发现是在获得请求的时候出错了. 引用 WebResponse response = WebRequest.Create("https://--").GetResponse(); 于是在服务器上用浏览器打开上面的地址,发现会弹出一个确认证书的窗口,看来是证书问题.

Cocos2d-x 3.0 编译出错 解决 error: expected &amp;#39;;&amp;#39; at end of member declaration

近期把项目移植到cocos2d-x 3.0,在整Android编译环境的时候,出现一大堆的编译出错,都是类似"error: expected ';' at end of member declaration"之类的,看了一些编译错误,都是cocos2d-x库里面的代码出错. 经过分析,怀疑可能是编译环境的问题,由于cocos2d-x使用了非常多C++11的新特性,这有可能导致老的编译器出错,看了一下NDK以下的文件以及toolchains里面的内容,windows编译器默认使用4.6,

解决ERROR 1130 (HY000): Host &#39;192.168.1.9&#39; is not allowed to connect to this MySQL server

本机是mysql的数据库,想用另一台ip为192.168.1.9的连接这个mysql数据库,可是报了这个错误. 查询得到2个方法 第一个是在user表把localhost改为%, 我这么做后不仅没有解决,本地连接都要[email protected]%这么做了(现在想想好像失误把所有localhost都给改了). 第二个方法就生效了. 终端登陆mysql,执行一句sql: GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.9' IDENTIFIED