我有以下.proto文件:
enum Enum1{ X=0; Y=1; } message SomeClass{ required Enum1 enum1=1; required Enum2 enum2=2; } enum Enum2{ X=0; Z=1; }
当我尝试使用protoc来编译它时,我收到以下错误:
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”.
我有办法克服这个问题!
解决方法
您可以在另一条消息中包含您的枚举,以便可见性不会发生冲突.
例子:
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; }
你也可以在枚举值前加上一些东西.如果您不更改值名称后面的数字,它应与旧版本保持兼容:
例如:
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; }