समस्या यह है कि सी ++ में, तीन कार्यों sqrt
नामित कर रहे हैं - एक float
में एक टेकिंग, एक एक double
लेने, और एक एक long double
लेने। जब आप
sqrt(aux.size());
संकलक यह निर्धारित करने का प्रयास करता है कि आप इनमें से किन कार्यों को कॉल करना चाहते हैं। चूंकि aux.size()
string::size_type
लौटाता है, जो न तो float
, double
, न ही long double
है, यह देखने की कोशिश करता है कि string::size_type
इन तीनों में से किसी के लिए निहित रूप से परिवर्तनीय है या नहीं। लेकिन चूंकि string::size_type
इन तीनों प्रकारों में परिवर्तनीय है, इसलिए संकलक कॉल को संदिग्ध के रूप में चिह्नित करता है, क्योंकि यह स्पष्ट नहीं है कि आप कौन से रूपांतरण करना चाहते हैं।
इसे ठीक करने के लिए, आप स्पष्ट रूप से aux.size()
को उस प्रकार के प्रकार में डाल सकते हैं जो आप चाहते हैं। उदाहरण के लिए:
sqrt(double(aux.size()));
या
sqrt(float(aux.size()));
इस कॉल स्पष्ट रूप से दो कार्यों में से एक से मेल खाते हैं बनाता है। जिस परिशुद्धता को आप चाहते हैं उसके आधार पर, आप तीन ओवरलोडों में से किसी एक को चुन सकते हैं। चूंकि आप बस int
पर वापस आ रहे हैं, तो शायद यह float
पर डालना ठीक है।
"एक बेजोड़ बाएं कोष्ठक एक अनसुलझा तनाव बनाता है जो पूरे दिन आपके साथ रहेगा" http://xkcd.com/859/ यही कारण है कि मैं इस तरह के मामलों के लिए सी-शैली को पसंद करता हूं - वे घोंसले के निम्न स्तर का उत्पादन करते हैं । – AnT
:-) धन्यवाद! फिक्स्ड। – templatetypedef