解决编译grpc接口报C3668、C2039、C2665和C2661错误

在使用cmake成功编译grpcv1.55.0并用protoc处理.proto文件后,将生成的接口文件集成到项目时遇到编译错误,包括方法未重写、成员不存在、参数类型不匹配等。错误源在于protoc生成的UTF-8编码文件带有BOM,导致编译失败,尤其是当文件包含中文时。更换grpc版本和C++标准均未解决问题。最终发现并解决了编码问题,确保文件为纯UTF-8无BOM格式,从而修复了编译错误。
摘要由CSDN通过智能技术生成

按官方教程使用cmake编译最新grpc v1.55.0很顺利,使用protoc编译.proto文件也很顺利。但是,生成的接口文件集成到项目编译时,却报了一堆的错误,主要有以下几种:

C3668  “XXX::Stub::async::YYY”:包含重写说明符“override”的方法没有重写任何基类方法

C2039 “YYY”:不是“XXX::Service”的成员

C2665 “grpc::internal::RpcMethodHandler<……>::RpcMethodHandler”:没有重载函数可以转换所有参数类型

C2661 “grpc::internal::RpcServiceMethod::RpcServiceMethod”:没有重载函数接受2个参数

更换低版本v1.51.3也不行,修改为C++14、17、20均不行。在百度、Google、Github上均找不到解决方案。

后来注意到,错误列表中显示的行号和跳转到的行不匹配,差了几行,没错,就是源文件utf-8编码问题,protoc生成的编码是utf-8不带bom,不带中文还好,带了中文就编译不了。足足花了一天时间才解决,为了后来人不掉入这个坑里,特记录一下。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值