VC中编译报错:error C2011: 'fd_set' : 'struct' 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;
}
其实可以不包含Windows.h,因为在winsock2.h中已经包含的windows.h

如果是很多的文件的话,找包含关系太繁琐,可以直接把 winsock2.h 的包含放在cpp最前面。

为什么会这样呢?头文件的包含还要求顺序,在MSDN中却没有解释。
只能说是微软的头文件写的有问题了。

VC中编译报错:error C2011: 'fd_set' : 'struct' type redefinition

时间: 2024-10-13 00:32:28

VC中编译报错:error C2011: 'fd_set' : 'struct' type redefinition的相关文章

解决error C2011: &#39;fd_set&#39; : &#39;struct&#39; 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++ -> prepro

node 中 npm报错 Error: ENOENT, stat &#39;C:\Users\Administrator\AppData\Roaming\npm&#39;

今天在看node书本时,安装express,看看里面的包.没想到出现这样一种情况. 报错了.后来思考了一下,可能是修改了node的默认安装路径.于是准备在出错的路径下建一个npm文件夹. 注意,有个时候会出现找不到AppData文件夹.看图: 看到这张图时大家应该明白了.因为这张图是隐藏起来的.大家要把他显示出来.至于如何在win7下显示文件夹,就不在这罗嗦了. 完成npm文件夹的创建后: 安装express试试: 看到下面那么一大坨东西,相信大家已经知道express暗转成功了. 在看看有没有

安卓中运行报错Error:Execution failed for task &#39;:app:transformClassesWithDexForDebug&#39;解决

安卓中运行报错Error:Execution failed for task ':app:transformClassesWithDexForDebug'解决 安卓中运行报错Error:Execution failed for task ':app:transformClassesWithDexForDebug'解决

关于编译报错“dereferencing pointer to incomplete type...

今天同事问了我一个问题,他make的时候报错,“第201行:dereferencing pointer to incomplete type”,我随即查阅了很多资料,也没看出个所以然.最后问题得到了解决,也懂得了原理,遂记录一下. 他的问题具体是这样. ? 1 2 3 4 5 6 #include <netinet/ip_icmp.h> ... struct icmp* aaa;     aaa = (struct icmp*)malloc(sizeof(struct icmp)); //假设

解决IDEA导入Eclipse项目时,编译报错“ Error:(1, 1) java: 非法字符: ‘\ufeff’”

今天在IDEA中导入了一个Eclipse项目,编译时报错: 原因:Eclipse可以智能地把UTF-8  BOM文件转换为普通的UTF-8文件,IDEA没有这个智能转换. 2种解决方式: 1.在所在目录下新建一个java文件,把原文件的内容剪切过去,删除原文件,再把新文件重命名为原来的文件名. 2.点击IDEA右下角的编码字符集,先换为GBK,再换为UTF-8 原文地址:https://www.cnblogs.com/chy18883701161/p/12590933.html

VS2015 C++编译报错 error:LNK2005 _main 已经在 *.obj 中定义

一个项目里只能有一个main函数, 如果出现 error:LNK2005 的错误,那么需要检查你是不是有两个源代码文件中都定义了main函数. 例如: 如果在a.cpp中定义了main函数,在b.cpp中也定义main函数,编译执行就会报 error:LNK2005 的错误. 原文地址:https://www.cnblogs.com/alpha-w/p/10415997.html

@Override注解在Eclipse中编译报错

导入新工程后,发现默认用的jre是1.5版本的,在Eclipse中右击工程选择Build Path->点击Configure Build Path->Java Build Path->点击JRE System Library后点击Edit->jdk1.8版本,点击Finish,点击OK. 但发现工程里有个java文件有红叉叉,提示要移除Override注解.这个问题是jdk1.5版本才有,1.6版本以上已经解决.在Eclipse中右击工程选择Build Path->Confi

SpaceVim中neomake报错 Error while trying to load a compilation database

回家装上archlinux,突发奇想装个SpaceVim写题 安装配置一路可以说是没有太大问题 最后在写题时出现如下问题 Error while trying to load a compilation database: Could not auto-detect compilation database for file "poj-1458.cpp" No compilation database found in /home/tanglizi/Code/acm/summerTra

sublime3中编译报错Could not open input file

php搭建完后出现Could not open input file错误 本来以为是php的新建那里出错,百度后修改多次后,发现无效 {"cmd": ["php", "$file"],"file_regex": "^(...*?):([0-9]*):?([0-9]*)","selector": "source.php"} 最后发现是未保存文件.