Ech*_*cho 14 java protocol-buffers
我有以下.proto文件:
enum Enum1{
X=0;
Y=1;
}
message SomeClass{
required Enum1 enum1=1;
required Enum2 enum2=2;
}
enum Enum2{
X=0;
Z=1;
}
Run Code Online (Sandbox Code Playgroud)
当我尝试使用protoc来编译它时,我收到以下错误:
proto.proto:19:5:"X"已定义为proto.proto:19:5:请注意,枚举值使用C++作用域规则,这意味着枚举值是其类型的兄弟,而不是它的子类.因此,"X"必须是唯一的,而不仅仅是"Enum2".
我有办法克服这个问题!
Mik*_*ike 12
您可以在另一个消息中包含枚举,这样可见性就不会冲突。
范例:
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;
}
Run Code Online (Sandbox Code Playgroud)
您也可以在枚举值前加上一些前缀。如果您不更改数值名称后的数字,则该数值应与旧版本兼容:例如:
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;
}
Run Code Online (Sandbox Code Playgroud)
代替
message SomeClass{
required Enum1 enum1=1;
required Enum2 enum2=2; }
Run Code Online (Sandbox Code Playgroud)
我想你应该有类似的东西
message SomeClass{
required Enum1 enum1.Y;
required Enum2 enum2.Z;
}
Run Code Online (Sandbox Code Playgroud)
编辑:您将其标记为 Java,但在问题中您提到了 c++,它是什么?
edit2:谷歌搜索了一下后我发现了这个http://www.mail-archive.com/protobuf@googlegroups.com/msg04986.html
您需要将 enum1.X 或 enum2.x 重命名为其他名称,以免它们发生冲突。
enum Enum1{
W=0;
Y=1;
}
message SomeClass{
required Enum1 enum1=1;
required Enum2 enum2=0;
}
enum Enum2{
X=0;
Z=1;
}
Run Code Online (Sandbox Code Playgroud)
如果由于应用程序依赖性你真的不能,我想你需要以某种方式重新设计你的程序..
| 归档时间: |
|
| 查看次数: |
6464 次 |
| 最近记录: |