Wednesday 15 February 2012

c++ - What does “In instantiation of … required from here” mean? -


मुझे निम्नलिखित कंपाइलर संदेश प्राप्त होता है

  main.cpp: एक के प्रारंभ में ?? शून्य fkt (Foo) [Foo = int] एक साथ: main.cpp: 5: 7: यहां से आवश्यक   

द्विआधारी वैसे भी बनाई गई है, इसलिए यह नहीं है एक त्रुटि। लेकिन यह भी एक चेतावनी के रूप में चिह्नित नहीं है यह संदेश क्या है और मुझे इसे क्यों मिलता है?

मैंने निम्न उदाहरण पर कोड घटा दिया

  टेम्पलेट & lt; typename Foo & gt; शून्य fkt (Foo f) {} int main () {fkt (1); वापसी 0; }   

¹ gcc 4.7.2

संपादित करें: यहां पुन: उत्पन्न करने के लिए चरण:

 % cat main.cpp टेम्पलेट & lt; typename Foo & gt; शून्य fkt (Foo f) {} int main () {fkt (1); वापसी 0; }% G ++ -Wall -Wextra main.cpp मुख्य सीपीपी: एक '' शून्य fkt (Foo) [Foo = int] [के साथ] के प्रारंभ में: main.cpp: 5: 7: यहां से आवश्यक Main.cpp: 2: 6: चेतावनी: अप्रयुक्त पैरामीटर "एफ" [-विवादित पैरामीटर]    

<पूर्व> main.cpp: एक के प्रारंभ में ??? void fkt (Foo) [फू = इंट के साथ] एक ????: main.cpp: 5: 7: यहां से आवश्यक है main.cpp: 2: 6: चेतावनी: अप्रयुक्त पैरामीटर â ???? एफ ???? [-वाहनयुक्त पैरामीटर]

यह सब एक चेतावनी है आप एक अप्रयुक्त पैरामीटर के बारे में 3 लाइन चेतावनी प्राप्त कर रहे हैं। पहली दो पंक्तियाँ कम्पाइलर हैं जो आपको चेतावनी के कारण की पहचान करने में मदद करने का प्रयास कर रहे हैं। यहां एक अंग्रेज़ी अनुवाद है:

टेम्पलेट तर्क Foo के रूप में int जैसा fkt के तत्काल में आवश्यक था लाइन 5 कॉलम 7 द्वारा आपके पास f नामक एक अप्रयुक्त पैरामीटर है।

fkt एक फ़ंक्शन टेम्पलेट है। टेम्पलेट को दिए गए टेम्पलेट तर्कों के साथ तत्काल होना चाहिए। उदाहरण के लिए, यदि आप fkt & lt; int & gt; का उपयोग करते हैं, तो fkt फ़ंक्शन टेम्पलेट Foo के रूप में int के साथ तत्काल होता है। यदि आप fkt & lt; float & gt; का उपयोग करते हैं, तो fkt फ़ंक्शन टेम्प्लेट को Foo के रूप में float के रूप में शुरू किया जाता है। >

विशेष रूप से, इस संदेश की यह पहली पंक्ति आपको बता रही है कि चेतावनी के अंदर fkt होता है जो कि Foo के रूप में int के साथ तत्काल किया गया था । चेतावनी की दूसरी पंक्ति आपको बताती है कि तात्कालिकता 5 लाइन पर हुई। इस रेखा से मेल खाती है:

  fkt (1);   

यह fkt के साथ Foo के रूप में int को तत्काल कर रहा है क्योंकि टेम्पलेट तर्क Foo उस तर्क के प्रकार से अनुमान लगाया जा रहा है जो आप दे रहे हैं। चूंकि आप 1 , Foo से गुजर रहे हैं int होने का अनुमान लगाया गया है।

No comments:

Post a Comment