Protocol Buffer: Enum issue

匿名 (未验证) 提交于 2019-12-03 00:48:01

问题:

I have the following .proto file :

enum Enum1{     X=0;     Y=1;     } message SomeClass{     required  Enum1 enum1=1;     required Enum2 enum2=2; } enum Enum2{     X=0;     Z=1;     } 

When I try to comile it using protoc , I get the following error :

proto.proto:19:5: "X" is already defined proto.proto:19:5: Note that enum values use C++ scoping rules, meaning that enum values are siblings of their type, not children of it. Therefore, "X" must be unique , not just within "Enum2".

I there any way I could overcome this issue !

回答1:

You could include your enum inside another message so the visibility will not conflict.

Exemple :

message Enum1{  enum Enum{      X=0;      Y=1;      } }  message Enum2{  enum Enum{      X=0;      Y=1;      } }  message SomeClass{     required  Enum1.Enum enum1=1;     required Enum2.Enum enum2=0; } 

You could also prefix your enum value with something. If you don't change the number after the name of your value, it should stay compatible with your old version : ex:

enum Enum1{     E1_X=0;     E1_Y=1;     } enum Enum2{     E2_X=0;     E2_Z=1;     } message SomeClass{     required  Enum1 enum1=1;     required Enum2 enum2=2; } 


回答2:

instead of

message SomeClass{ required  Enum1 enum1=1; required Enum2 enum2=2; } 

i think you should have something like

message SomeClass{     required  Enum1 enum1.Y;     required Enum2 enum2.Z; } 

edit: you tagged this as Java, but in the question you refer to c++, witch one it is?

edit2: After googling a bit I found this http://www.mail-archive.com/protobuf@googlegroups.com/msg04986.html

you need to rename enum1.X or enum2.x to some other name so that they don't conflict.

enum Enum1{     W=0;     Y=1;     } message SomeClass{     required  Enum1 enum1=1;     required Enum2 enum2=0; } enum Enum2{     X=0;     Z=1;     } 

if you really cant because of application dependencies i guess you need to redesign your program somehow..



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!