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文件里看,递归得看进去,即头文件里的头文件也看;除去<iostream>等C++的头文件,就是我自己加的<windows.h>和<Winsock2.h>;

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

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

问题原因:

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

解决方案:

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

2. 在#include <windows.h>之前加上#define WIN32_LEAN_AND_MEAN

3. 其他

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值