error C2011 type redefinition类型重定义

编译期报错:

c:\program files (x86)\windows kits\10\include\10.0.17763.0\shared\ws2def.h(235): error C2011: “sockaddr”:“struct”类型重定义

解决思路:

先google搜"error C2011";

在微软官方技术文档里找到其描述:

    提到很可能是一个编译单元#include了两次.h头文件导致,用#pragma once解决;

    还可以把/P选项加到编译器选项中(Visual Studio里就是"属性==>C/C++==>预处理器==>预处理到文件), 把#include后的文件输出到.i文件里而不执行编译,然后Ctrl+F来查找该重复定义的struct第1次和第2次是在哪里;

我的分析:

ws2def.h是系统自带的文件,已经用#pragma once防得很好了,不可能是该文件两次#include导致;则只能是其他.h文件里也定义了同名strucht;

在一串报错文本之前找到第一个最近的源码文件,本例是"context.cc",则肯定是在编译该文件时发现的错;

在该文件的#include文件里看,递归得看进去,即头文件里的头文件也看;除去等C++的头文件,就是我自己加的

自己建个VC++工程,#include这两个文件,编译报同样错误!问题定位准确!

上google搜"C2011 windows.h Winsock2.h",发现stackoverflow上有解法,搞定!

问题原因:

windows.h里和Winsock2.h里都有“sockaddr”这个struct的定义;

解决方案:

1. 把二者先后顺序调整一下;

2. 在#include 之前加上#define WIN32_LEAN_AND_MEAN

3. 其他

你可能感兴趣的:(DEBUG)