2013-07-03 8 views
6

डॉक्स से apple's example का उपयोगब्लॉक सिंटेक्स त्रुटि 'का निर्माण एक ब्लॉक'

float (^oneFrom)(float); 


oneFrom = ^(float aFloat) { 

    float result = aFloat - 1.0; 

    return result; 

}; 

मैं दो त्रुटियों मिलता है: एक अलग प्रकार के साथ 'oneFrom' की

  1. पुनर्व्याख्या: 'int' बनाम 'नाव (^) (नाव)'
  2. प्रकार विनिर्देशक लापता, 'int'

ALS के चूक ओ दस्तावेज़ से ..

आप स्पष्ट रूप से एक ब्लॉक अभिव्यक्ति की वापसी मूल्य की घोषणा नहीं करते हैं, यह स्वचालित रूप से ब्लॉक की सामग्री से अनुमान लगाया जा सकता है। यदि रिटर्न प्रकार अनुमानित है और पैरामीटर सूची शून्य है, तो आप (शून्य) पैरामीटर सूची को भी छोड़ सकते हैं। अगर या एकाधिक रिटर्न स्टेटमेंट मौजूद हैं, तो उन्हें बिल्कुल मेल खाना चाहिए (यदि आवश्यक हो तो कास्टिंग का उपयोग करना)।

उत्तर

3

आप ब्लॉकों को परिभाषित नहीं कर सकते हैं की आवश्यकता होगी फ़ाइल स्कोप पर, केवल कार्यों में। यह अपेक्षित के रूप में काम करता है:

void foo (void) 
{ 
    float (^oneFrom)(float); 
    oneFrom = ^(float aFloat) { 
     float result = aFloat - 1.0; 
     return result; 
    }; 
} 
+0

मेरी समझ यह थी कि ब्लॉक सी फ़ंक्शन पॉइंटर्स के समान हैं। क्या मैं इसे हेडर फ़ाइल में घोषित नहीं कर सकता? – estobbart

+0

@estobbart नहीं, ब्लॉक फ़ंक्शन पॉइंटर्स की तुलना में अधिक जटिल अवधारणा हैं। सबसे महत्वपूर्ण: वे डेटा लेते हैं, इसलिए उन्हें ढेर या ढेर पर गतिशील रूप से आवंटित किया जाना चाहिए। सी स्थिर भंडारण अवधि के साथ वस्तुओं के प्रारंभिकरण की अनुमति नहीं देता है, इसलिए आप फ़ाइल स्कोप पर एक ब्लॉक को परिभाषित नहीं कर सकते हैं। –

+0

@estobbart आप, हेडर फ़ाइल में 'extern' का उपयोग करके ब्लॉक प्रकार परिवर्तक घोषित कर सकते हैं। हालांकि, आप एक ब्लॉक को परिभाषित नहीं कर सकते हैं। –

-1

कि does not ब्लॉक एक वापसी प्रकार है, और डिफ़ॉल्ट वापसी प्रकार शून्य है, तो आप जाने के लिए

float (^oneFrom)(float); 

oneFrom =^float (float aFloat) { 

    float result = aFloat - 1.0; 

    return result; 

}; 

here एक बेहतर ब्लॉक उदाहरण

+0

यह उदाहरण अभी भी वही त्रुटियों की रिपोर्ट करता है। क्या मुझसे साफ़ - साफ़ कुछ चीज़ चूक रही है? – estobbart

+0

नहीं। ब्लॉक में एक रिटर्न प्रकार है जिसे वास्तविक 'रिटर्न' कथन से घटाया जाता है। इसमें सही प्रकार का 'फ्लोट' है। –

+0

आह, हाँ मेरी गलती, हमेशा किसी कारण से इसे पूरी तरह से किया जाता है। आपका उत्तर शायद असली समाधान भी है, इस बारे में नहीं सोचा था कि ब्लॉक को – Fonix

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