2011-06-03 28 views

उत्तर

31

string::size()size_t देता है, और sqrt इसे किसी भी संस्करण में स्वीकार नहीं करता है। तो संकलक को कास्ट करना है, और यह नहीं चुन सकता कि वे क्या हैं - वे सभी ठीक हैं। आप स्पष्ट डाली डाल करने के लिए है:

maxy = (int)sqrt((double)aux.size()); 
11

समस्या यह है कि सी ++ में, तीन कार्यों 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 पर डालना ठीक है।

+1

"एक बेजोड़ बाएं कोष्ठक एक अनसुलझा तनाव बनाता है जो पूरे दिन आपके साथ रहेगा" http://xkcd.com/859/ यही कारण है कि मैं इस तरह के मामलों के लिए सी-शैली को पसंद करता हूं - वे घोंसले के निम्न स्तर का उत्पादन करते हैं । – AnT

+0

:-) धन्यवाद! फिक्स्ड। – templatetypedef

0

उन प्रकारों में से एक करने के लिए अपने aux.size() कास्टिंग का प्रयास करें, तो यह अस्पष्ट नहीं होगा ...

1

aux.size() रिटर्न एक std::size_t, लेकिन sqrt() एक ओवरलोड संस्करण है जिसे std::size_t तर्क लेता नहीं है ।

संकलक रिपोर्ट है कि sqrt 3 भार के होते हैं: जो float, double और long double तर्क ले। std::size_t उनमें से किसी भी रूप में परिवर्तित किया जा सकता है, इसलिए एक अस्पष्टता है क्योंकि संकलक को पता नहीं है कि std::size_t से float या double या long double को परिवर्तित करना है या नहीं।

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