2016-04-12 3 views
5

त्रुटि CS1663 त्रुटि के लिए कोई कामकाज है ("निश्चित आकार बफर प्रकार निम्न में से एक होना चाहिए: बूल, बाइट, लघु, int, लंबा, चार, sbyte, ushort, uint, ulong, float या double।")?एक असुरक्षित निश्चित कस्टम संरचना सरणी घोषित करने पर कामकाज?

मुझे किसी अन्य ब्लिटेबल कस्टम प्रकार संरचना से एक असुरक्षित निश्चित सरणी घोषित करने की आवश्यकता है, लेकिन मैं इस कंपाइलर त्रुटि में फंस गया हूं।

नीचे दी गई समस्या को स्पष्ट करने के लिए कुछ कोड दिखा रहे हैं।

struct s1 
{ 
    byte _b1; 
    byte _b2; 
} 

unsafe struct s2 
{ 
    fixed s1 _s1[5]; // CS1663 here... 
} 

ध्यान दें कि दो structs blittable हैं, इसलिए त्रुटि मेरे लिए कोई समझ नहीं लेती है।

किसी को भी यह पता है कि मैं क्या कर सकता हूं?

धन्यवाद।

+0

आप असुरक्षित 'struct s2 { तय एस 1 एस 1 मतलब क्या [5]; } '? –

+0

हां !!! कोड कोड स्निपेट में मैं इस छोटी सी त्रुटि को ठीक कर दूंगा, धन्यवाद। इस @VadimMartynov पर कोई विचार? – ptr0x

+0

ठीक है, आपके पास सिर्फ एक वाक्यविन्यास त्रुटि है। आपको फ़ील्ड संशोधक (जैसे निजी, निश्चित, पठनीय, स्थैतिक और अन्य), फ़ील्ड प्रकार (जैसे बाइट, int, s1, स्ट्रिंग) और फ़ील्ड नाम (किसी भी नाम का उपयोग किया जाएगा जो आपके परिवर्तनीय को फिर से भरने के लिए उपयोग किया जाएगा। आप फ़ील्ड गायब हैं टाइप (एस 1)। फिक्स्ड बफर घोषित करने के बारे में और पढ़ें: https://msdn.microsoft.com/en-us/library/zycewsya(v=vs.80).aspx –

उत्तर

0

यह fixed size buffers का प्रतिबंध है।

निश्चित सरणी नियमित संरचना सदस्यों के लिए की अनुमति वाले किसी भी विशेषता या संशोधक को ले सकती है। केवल प्रतिबंध यह है कि सरणी प्रकार bool, बाइट, चार, कम, पूर्णांक, लंबे, sbyte, ushort, uint, Ulong होना चाहिए है, फ्लोट, या डबल

आप केवल उन प्रकारों का उपयोग कर सकते हैं लेकिन संयोजन नहीं (जैसे struct में केवल वही प्रकार हैं)। यदि आपका प्रकार बिटेबल है या नहीं तो कोई फर्क नहीं पड़ता। आप बस इसका इस्तेमाल नहीं कर सकते।

फिर आप निश्चित आकार बफर के लिए अपने कस्टम struct का उपयोग नहीं कर सकते हैं।

वर्कअराउंड? श्रीमान, हाँ, हो सकता है। आप अपने कोड संरचना बदल सकते हैं और कुछ इस तरह उपयोग कर सकते हैं:

unsafe struct s2 
{ 
    fixed byte _b1[5]; 
    fixed byte _b2[5]; 
} 
+0

ऊपर मेरी टिप्पणी का जवाब दें: "@VadimMartynov मुझे पता है कि मेरे पास एक वाक्यविन्यास त्रुटि है: डी मेरा प्रश्न" क्यों "मुझे इस वाक्यविन्यास त्रुटि को हल कर रहा है।इस त्रुटि का एकमात्र कारण मैं कल्पना कर सकता हूं कि स्मृति में फिक्सिंग से बचने के लिए एक गैर-विचित्र प्रकार है। मुद्दा यह है कि मेरा प्रकार वास्तव में blittable है। इस सीमा के लिए कुछ कामकाज होना चाहिए, यह एक बहुत ही आम समस्या होनी चाहिए। " – ptr0x

+0

आपका कामकाज मेरे उदाहरण से मेल नहीं खाता है! आपके उदाहरण में मैं एक रैखिक कच्चे बफर के साथ समाप्त करूंगा जिसमें 5 तत्वों का प्रतिनिधित्व किया जाएगा जो _b1 और 5 तत्वों का प्रतिनिधित्व करते हैं _b2। मेरे उदाहरण में स्मृति में बफर एक ही आकार का होना चाहिए लेकिन अलग-अलग व्यवस्थित होना चाहिए: _b1 का पहला 1 तत्व, फिर _b2 का 1 तत्व और इसी तरह। – ptr0x

+0

वैसे यही कारण है कि इस कार्यवाही को वर्कअराउंड कहा जाता है। –

संबंधित मुद्दे