2013-11-09 21 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をスコープに入れるには、上部に '#include 'が必要な場合があります。 –

+0

うん、私はそれを固定したら気づいた:) – XNor

答えて

8

テンプレートの種類Tは、明示的に定義する必要があります(この場合はstd::string中)のいずれかのパラメータから推定することはできませんので

int b = stringToNumber<int>(a); 

を試してみてください。

+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); 
関連する問題