2014-09-02 18 views
5

Tôi có một tin nhắn mẫu protobuf này:Protobuf "oneof" chức năng không làm việc

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

Nhưng nó là thất bại trong việc biên dịch, nói:

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

Dựa trên số dòng, nó đang tìm kiếm cho rằng yêu cầu/tùy chọn/lặp đi lặp lại keyworkd trước khi "oneof" và nó là khiếu nại của số trường mất tích sau khi "oneOfTest". Đây không phải là cách chính xác để sử dụng oneof? Tôi đang sử dụng trình biên dịch java cho Protobuf.

+0

Bạn đã thử thêm một trong các từ khóa đó vào vị trí mà nó cho biết bạn nên có một từ khóa chưa? Chuyện gì xảy ra sau đó? – csmckelvey

+2

Bạn có đang sử dụng trình biên dịch đệm giao thức gần đây nhất không? 'oneof' được thêm vào 2.6, có vẻ như đã được phát hành vào thứ Hai tuần trước. –

+0

@LouisWasserman Đó là nó, cảm ơn! Tôi không nhận ra tính năng 'oneof' mới. Nếu bạn muốn viết bình luận của bạn như là câu hỏi, tôi có thể chấp nhận nó như là câu trả lời. – yellavon

Trả lời

9

Đảm bảo bạn đang sử dụng phiên bản mới nhất của trình biên dịch đệm giao thức: oneof cú pháp được thêm vào chỉ trong phiên bản mới nhất, được phát hành vào thứ Hai tuần trước.

+0

Và nếu bạn đang sử dụng pre-2.6 protoc, nó cung cấp thông báo lỗi gây hiểu lầm nhắc bạn thêm "bắt buộc" hoặc "tùy chọn" ở phía trước "oneof" của bạn. Nếu bạn làm điều đó, sau đó chuyển sang 2.6 protoc, nó sẽ không hiểu những gì bạn đang làm cho đến khi bạn loại bỏ "bắt buộc" hoặc "tùy chọn". –

Các vấn đề liên quan