2013-11-09 96 views
5

我試圖將字符串轉換爲數字。對於這一點,我發現下面的方法:編譯模板錯誤 - 沒有匹配的調用函數

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

的問題是,我收到以下錯誤:

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

五月誰能告訴我爲什麼我收到這樣的錯誤,以及如何解決它?

預先感謝您。

+0

應該有更多的錯誤,喜歡的事實,'T'無法被推斷。 – chris

+1

您可能需要'#include '將std :: stringstream放到您的作用域中。 –

+0

是的,我意識到一旦我修好了:) – XNor

回答

8

嘗試

int b = stringToNumber<int>(a); 

由於模板類型T無法從任何參數來推斷(在這種情況下std::string),你需要明確地定義它。

+0

我現在看到了,謝謝。 – XNor

+1

你的意思是推導*,而不是派生*。另外,C++ 11增加了'stoi','stol'等,所以使用'stringstream'就沒有必要了。總是有'boost :: lexical_cast' – Praetorian

+0

@Praetorian,是正確的。 「派生」被添加到我的答案由別人。 –

0

您還沒有提供模板參數。請注意,在C++ 11,你可以用std::stoi

std::string a = "254"; 
int b = std::stoi(a); 
相關問題