2009-05-31 12 views
5

ए के प्रोटोटाइप के साथ एक फ़ंक्शन है:आप फ़ंक्शन के प्रोटोटाइप को पैरामीटर के साथ कैसे बनाते हैं जिसमें डिफ़ॉल्ट मान हैं?

void arryprnt(int[], string, int, string, string); 

और एक परिभाषा:

void arryprnt(int[] a, string intro, int len, string sep=", ", string end=".") { 
// stuff 
} 

और मैं इसे इस तरह से कॉल कर रहा हूं:

arryprnt(jimmy, "PSEUDOJIMMY: ", 15); 

... जब मैं arryprnt को वह कॉल करें, मुझे एक कंपाइलर त्रुटि मिल रही है जिसमें कहा गया है कि प्रोटोटाइप कहने के आधार पर मैंने बहुत कम तर्कों का उपयोग किया है। "ठीक है," मैं सोच रहा हूं, "कंपाइलर नहीं जानता है कि कुछ arryprnt के पैरामीटर में डिफ़ॉल्ट मान हैं। मैं सिर्फ पैरामीटर को प्रोटोटाइप में परिभाषित करता हूं।" और मैंने किया, हालांकि, मुझे एक कंपाइलर त्रुटि मिली जो मुझे बता रही है कि मैं के साथ arryprnt को बहुत अधिक तर्कों के साथ बुला रहा था! मैं बस सभी तर्कों को स्पष्ट रूप से निर्दिष्ट कर सकता हूं, लेकिन क्या सभी तर्कों को निर्दिष्ट किये बिना इसे कॉल करने का कोई तरीका है?

उत्तर

20

आप इस तरह परिभाषा नहीं प्रोटोटाइप में डिफ़ॉल्ट तर्क रखना चाहिए,:

void arryprnt(int[] a, string intro, int len, string sep=", ", string end="."); 

और उनके बिना परिभाषा बनाने:

void arryprnt(int[] a, string intro, int len, string sep, string end) { 
    // ... 
} 

Btw: एक और नोट पर। यह कॉन्स संदर्भ द्वारा int से अधिक वस्तुओं को पारित करने के लिए अच्छा अभ्यास माना जाता है। हालांकि यह सभी स्थितियों के लिए उपयुक्त नहीं है, यह ज्यादातर के लिए उपयुक्त है और अनावश्यक रूप से चीजों की प्रतिलिपि बनाने से बचाता है। उदाहरण के लिए:

void func(const std::string &s) { 
    // do some read-only operation with s. 
} 

func("hello world"); 
+0

उम्म ... किसी भी तरह से काम नहीं किया। मुझे "बहुत सारे तर्क" त्रुटि मिल रही है। – Xonara

+2

यदि यह काम नहीं करता है, तो आप कुछ गलत कर रहे हैं। मुझे यकीन नहीं है कि उस मुद्दे का क्या कारण होगा, लेकिन यह करने का यह सही तरीका है। –

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