ue c++ protobuf map隐式转换报错问题

在ue c++中使用protobuf时,一旦.proto文件中包含map字段,就会导致编译报错
error C4800 从“xxxxxx”到 bool 的隐式转换。信息可能丢失
ue把这个警告视为了错误,纯c++工程是没有错误可以通过的

最终解决方案

修改\Protobuf\include\google\protobuf\map_field_inl.h这个文件
添加#pragma warning(disable: 4800)在这里插入图片描述

尝试过的其他方式

1使用其他版本的protobuf

使用其他版本打一次包太麻烦了,而且没有搜索到相关信息,不能保证解决,放弃

2修改源代码中的隐式转换

查看报错有两处隐式转换
第一处是一个返回值,简单, 加个显示转换就好了,在这里插入图片描述
在这里插入图片描述
第二处是这里,有点痛苦了,一个模板参数去匹配MapValueSpaceUsedExcludingSelfLong,后者又有三个版本,一个string, 一个bool,一个模板,直接删除bool版本会报错,模板会一点但不多,找ai写了个分支选择的
但是又出现了第三处报错,第三处来自于.proto生成pb.cc文件,
同样的pb.cc在纯c++工程是能通过的,但是ue中把再次把bool的隐式转换视为了错误
如果要解决,思路写个脚本处理pb.cc文件,给所有隐式转换的地方改成显示转换,但是这样维护起来太痛苦了
思路转变为屏蔽掉c4800这个报错
在这里插入图片描述
在这里插入图片描述

3.Build.cs中操作

在该文件下添加了选项PublicDefinitions.Add(“DISABLE_WARNING_4800”);
无效,Ai给出的解释是:这个宏只是一个普通的预处理定义,没有实际的编译器指令功能
最终变成了开头直接在对应头文件里屏蔽这个错误

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值