2011-10-31 6 views
5

मैं निम्नलिखित .proto फ़ाइल है: जब मैं यह protoc का उपयोग कर comile करने की कोशिशप्रोटोकॉल बफ़र: Enum मुद्दा

enum Enum1{ 
    X=0; 
    Y=1;  
} 
message SomeClass{ 
    required Enum1 enum1=1; 
    required Enum2 enum2=2; 
} 
enum Enum2{ 
    X=0; 
    Z=1;  
} 

, मैं निम्नलिखित त्रुटि मिलती है:

proto.proto: 19: 5: "एक्स" पहले से ही proto.proto परिभाषित किया गया है: 1 9: 5: ध्यान दें कि enum मान C++ स्कॉइंग नियमों का उपयोग करते हैं, जिसका अर्थ है कि enum मान उनके प्रकार के भाई हैं, न कि इसके बच्चे। इसलिए, "एक्स" अद्वितीय होना चाहिए, न केवल "Enum2" के भीतर।

मैं इस मुद्दे को दूर करने का कोई तरीका नहीं था!

+1

नाम बदलें 'Enum2.X'? – nfechner

+0

आपका मतलब एक्स @ Enum2 नाम बदलें !! यदि हां, तो मैं अभी इस पर निर्भर नहीं हूं क्योंकि आवेदन पर निर्भरता है, – Echo

+0

आपके पास दो समान enum उदाहरण हैं, एक्स – John

उत्तर

0

message SomeClass{ 
required Enum1 enum1=1; 
required Enum2 enum2=2; } 

के बजाय

मुझे लगता है कि आप की तरह

message SomeClass{ 
    required Enum1 enum1.Y; 
    required Enum2 enum2.Z; 
} 

संपादित कुछ होना चाहिए: आप जावा के रूप में इस टैग किए गए, लेकिन सवाल में आप सी का उल्लेख ++, डायन एक यह क्या है?

EDIT2: थोड़ा googling के बाद मैं इस http://www.mail-archive.com/[email protected]/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;  
} 

यदि आप वास्तव में क्योंकि आवेदन निर्भरता मैं लगता है कि आप किसी भी तरह अपने कार्यक्रम नया स्वरूप की जरूरत है ..

+0

मैं जावा का उपयोग करता हूं लेकिन जब मैं प्रोटोकॉल कंपाइलर का उपयोग करके अपनी .proto फ़ाइल संकलित करता हूं, तो मुझे त्रुटि मिलती है I उल्लेख किया । – Echo

+0

लेकिन इस तरह आपने उल्लेख किया है, Enum1 हमेशा enum1 का मूल्य होगा। वाई .... क्या अन्य सुझाव हैं !! – Echo

+0

ने मेरी उत्तर आशा संपादित की जो मदद करता है – RagnaRock

4

आप एक और संदेश के अंदर अपने enum शामिल हो सकते हैं तो दृश्यता संघर्ष नहीं होगा की नहीं कर सकते।

उदाहरण:

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; 
} 

तुम भी कुछ के साथ अपने enum मूल्य उपसर्ग सकता है। आप अपने मूल्य के नाम के बाद संख्या में परिवर्तन नहीं करते हैं, यह अपने पुराने संस्करण के साथ संगत रहना चाहिए: पूर्व:

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; 
}