你好,我正在使用 protobuf 进行开发,但是遇到了一个问题。
我有一些枚举函数,但其中两个有相同的别名。当我尝试将文件编译为某些语言(如 go)时,编译器会返回错误信息。
我已经按照 protobuf 文档中的示例定义了该枚举,但仍然无法解决问题。
enum EnumAllowingAlias {
option allow_alias = true;
UNKNOWN = 0;
STARTED = 1;
RUNNING = 1;
}
enum EnumNotAllowingAlias {
UNKNOWN = 0;
STARTED = 1;
// RUNNING = 1; // Uncommenting this line will cause a compile error inside Google and a warning message outside.
}
这是谷歌文档中说,如果您需要在一些不同的枚举中使用相同的别名,则需要在枚举中添加选项“option allow_alias = true;”。但是,在尝试编译.proto文件后,编译器会响应以下错误信息:
我不知道出了什么问题。有人知道问题出在哪里吗?example.proto:13:5: "UNKNOWN" 在 "namespace" 中已经定义。
example.proto:13:5: 枚举值使用 C++ 作用域规则,这意味着枚举值是其类型的兄弟,而不是其子级。
因此,“UNKNOWN”必须在“kluso”内唯一,而不仅仅是在“EnumNotAllowingAlias”内唯一。example.proto:14:5: "STARTED" 在 "namespace" 中已经定义。
example.proto:14:5: 枚举值使用 C++ 作用域规则,这意味着枚举值是其类型的兄弟,而不是其子级。
因此,“STARTED”必须在“kluso”内唯一,而不仅仅是在“EnumNotAllowingAlias”内唯一。
ENUMALLOWINGALIAS_UNKNOWN
对吧?顺便说一句,Go编译器会尝试通过为枚举值添加前缀来“帮助”你;这通常很好。但是现在,在这种情况下,您的常量被定义为<package_name>.EnumAllowingAlias_ENUMALLOWINGALIAS_UNKNOWN
(插入 facepalm 表情)。 - jackic23