2013-11-09 19 views
5

Dizeyi bir sayıya dönüştürmeye çalışıyorum.Şablonlarla hata derleme - çağrı için eşleme işlevi yok

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

Mayıs kimse böyle hata alıyorum ve nasıl bunu düzeltmek için am neden söyle bana:

#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; 
} 

sorun aşağıdaki hatayı alıyorum olmasıdır: Bunun için, aşağıdaki yol buldum?

Önceden teşekkür ederiz. Şablon türü T açıkça bunu tanımlamanız gerekir (bu durumda std::string olarak) parametrelerin herhangi çıkarılabilir edilemez çünkü

+0

t 'çıkaramayız 'gerçeği gibi, hata daha olmamalıdır. – chris

+1

Ayrıca std :: stringstream işlevini de kapsamınıza almak için en üstte 'numaralı #include gerekebilir. –

+0

Evet, bir kez düzelttikten sonra farkettim :) – XNor

cevap

8

int b = stringToNumber<int>(a); 

deneyin.

+0

Şimdi anlıyorum, teşekkürler. – XNor

+1

Yani * çıkarılmış *, değil * türetilmiş *. Ayrıca, C++ 11 'stoi',' stol' vb. Ekleyerek bir 'stringstream' kullanmak gerekli değildir. Ve her zaman 'lexical_cast' – Praetorian

+0

@Praetorian' doğrudur. Cevabım "başkasına" eklenmiştir. –

0

Şablon bağımsız değişkeni sağlamadınız. Eğer std::stoi kullanabilirsiniz C++ 11 unutmayın:

std::string a = "254"; 
int b = std::stoi(a); 
İlgili konular