2014-09-02 33 views
5

我有這個樣的protobuf消息:的Protobuf「oneof」功能不能正常工作

message testMessage{  
    oneof oneOfTest{ 
     string test2 = 2; 
     int32 test3 = 3; 
    } 
} 

但它不能編譯,說:

[ERROR] protoc failed error: Expected "required", "optional", or "repeated". 
test.proto: Missing field number. 

基於行號,它正在尋找在「oneof」之前需要/可選/重複的keyworkd,並在「oneOfTest」之後抱怨丟失的字段編號。這不是使用其中一種的正確方法嗎?我正在使用Protobuf的java編譯器。

+0

您是否曾嘗試添加其中一個關鍵字,表示您應該擁有一個?然後會發生什麼? – csmckelvey 2014-09-02 17:42:32

+2

您使用的是最新的協議緩衝區編譯器嗎?在2.6版本中增加了一個,它似乎在上週一發布。 – 2014-09-02 17:49:18

+0

@LouisWasserman就是這樣,謝謝!我沒有意識到'oneof'功能是新的。如果你想寫你的評論作爲問題,我可以接受它作爲答案。 – yellavon 2014-09-02 18:48:03

回答

9

請確保您使用的是最新版本的協議緩衝區編譯器:oneof語法僅在上週一發布的最新版本中添加。

+0

如果您使用的是2.6之前的protoc,它會給出誤導性的錯誤消息,提示您在「oneof」前添加「required」或「optional」。如果你這樣做,然後切換到2.6 protoc,它不會明白你在做什麼,直到你刪除「必需」或「可選」。 – 2015-02-17 22:30:11