proto编译时报错:error: ‘xxx’ conflicts with a previous declaration

文档声明:
以下资料均属于本人在学习过程中产出的学习笔记,如果错误或者遗漏之处,请多多指正。并且该文档在后期会随着学习的深入不断补充完善。感谢各位的参考查看。


笔记资料仅供学习交流使用,转载请标明出处,谢谢配合。
如果存在相关知识点的遗漏,可以在评论区留言,看到后将在第一时间更新。
作者:Aliven888

问题描述

  我定义了两个 proto (aliven1.protoaliven2.proto),枚举类型中都包含 kUnknown 字段。在使用时会报错如下:

# aliven1.proto
syntax = "proto3";
package aliven.proto;

enum Aliven1Status {
  kUnknown = 0;
  # todo ...
}

message FusionSystemMsg {
  Aliven1Status aliven_sts = 1;
  # todo ...
}

# aliven2.proto
syntax = "proto3";
package aliven.proto;

enum Aliven2Status {
  kUnknown = 0;
  # todo ...
}

message FusionSystemMsg {
  Aliven2Status aliven_sts = 1;
  # todo ...
}

报错信息

> error: ‘kUnknown’ conflicts with a previous declaration
> note: previous declaration ‘aliven::proto::Aliven1Status  aliven::proto::kUnknown’
> error: cannot convert ‘aliven::proto::Aliven2Status::kUnknown’ to ‘const aliven::proto::Aliven1Status::kUnknown’ in initialization

问题分析

  两个 proto 中都有 kUnknown 字段(虽然 enum 对象名不一样),而且两个作用域是 aliven::proto; 所以会报错 kUnknown 字段会报错重复声明。

问题解决方案

  在操作 proto 时,如果作用域相同时(同为xxx::proto),尽量不要定义重复的变量 或者 枚举(enum)名称。
  两个 enum 做出如下修改即可(加个前缀)解决该问题。

# aliven1.proto
enum Aliven1Status {
  kAliven1Unknown = 0;
  # todo ...
}

# aliven2.proto
enum Aliven2Status {
  kAliven2Unknown = 0;
  # todo ...
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值