2013-11-09 9 views
5

के लिए कोई मिलान करने वाला फ़ंक्शन नहीं है, मैं एक स्ट्रिंग को किसी संख्या में बदलने की कोशिश कर रहा हूं।टेम्पलेट्स के साथ त्रुटि संकलित करें - कॉल

error: no matching function for call to ‘stringToNumber(std::string&)’

मई किसी को मुझे बताओ क्यों मैं ऐसे त्रुटि हो रही है और इसे ठीक करने के लिए:

#include <iostream> 
#include <string> 

template <typename T> 
T stringToNumber(const std::string &s) 
{ 
    std::stringstream ss(s); 
    T result; 
    return ss >> result ? result : 0; 
} 

int main() 
{ 
    std::string a = "254"; 
    int b = stringToNumber(a); 

    std::cout << b*2 << std::endl; 
} 

समस्या यह है कि मैं निम्न त्रुटि हो रही है है: कि के लिए, मैं निम्नलिखित रास्ता मिल गया?

अग्रिम धन्यवाद।

+0

वहाँ, त्रुटि के लिए और अधिक होना चाहिए तथ्य यह है कि 'T' निष्कर्ष निकाला नहीं जा सकता है की तरह। – chris

+1

आपको अपने दायरे में std :: stringstream प्राप्त करने के लिए शीर्ष पर '#' शामिल करने की आवश्यकता हो सकती है। –

+0

हाँ, मुझे एहसास हुआ कि मैंने इसे ठीक कर लिया है :) – XNor

उत्तर

8

int b = stringToNumber<int>(a); 

प्रयास करें क्योंकि टेम्पलेट प्रकार T (इस मामले std::string में) मानकों में से किसी से निष्कर्ष निकाला नहीं जा सकता है आप स्पष्ट रूप से इसे परिभाषित करने की जरूरत।

+0

अब मैं देखता हूं, धन्यवाद। – XNor

+1

आपका मतलब है * कट *, नहीं * व्युत्पन्न *। इसके अलावा, सी ++ 11 ने 'stoi', 'stol' इत्यादि जोड़ा। इसलिए' स्ट्रिंगस्ट्रीम 'का उपयोग करना आवश्यक नहीं है। और हमेशा 'boost :: lexical_cast' – Praetorian

+0

@Petetorian, सही है। "व्युत्पन्न" किसी अन्य व्यक्ति द्वारा मेरे उत्तर में जोड़ा गया था। –

0

आपने टेम्पलेट तर्क नहीं दिया है। ध्यान दें कि में सी ++ 11, आप std::stoi उपयोग कर सकते हैं:

std::string a = "254"; 
int b = std::stoi(a); 
संबंधित मुद्दे