协议缓冲区:枚举问题
我有以下 .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”已定义 proto.proto:19:5:请注意 枚举值使用 C++ 作用域规则,这意味着枚举值是 他们的类型的兄弟姐妹,而不是他们的孩子。因此,“X”必须是 unique ,不仅仅是在“Enum2”内。
我有什么办法可以克服这个问题!
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 !
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
而不是
我认为你应该有类似
编辑的东西:你将其标记为Java,但在你提到的问题中你提到了c ++,它是什么?
编辑2:
经过一番谷歌搜索后,我发现了这个http://www.mail-archive。 com/[email protected]/msg04986.html
您需要将 enum1.X 或 enum2.x 重命名为其他名称,以便它们不会发生冲突。
如果由于应用程序依赖性你真的不能,我想你需要以某种方式重新设计你的程序..
instead of
i think you should have something like
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/[email protected]/msg04986.html
you need to rename enum1.X or enum2.x to some other name so that they don't conflict.
if you really cant because of application dependencies i guess you need to redesign your program somehow..
您可以将枚举包含在另一条消息中,这样可见性就不会发生冲突。
示例:
您还可以在枚举值前加上一些前缀。如果您不更改值名称后面的数字,它应该与您的旧版本保持兼容:
前任:
You could include your enum inside another message so the visibility will not conflict.
Exemple :
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:
您可以在枚举中使用前缀
You can use prefix in enumeration then