使用模板编译错误 - 没有匹配的调用函数

时间:2013-11-09 20:42:16

标签: c++ templates type-conversion stdstring

我正在尝试将字符串转换为数字。为此,我发现了以下方式:

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

问题是我收到以下错误:

  

错误:没有匹配函数来调用'stringToNumber(std :: string&amp;)'

任何人都可以告诉我为什么我会收到这样的错误以及如何修复它?

提前谢谢。

2 个答案:

答案 0 :(得分:13)

尝试

int b = stringToNumber<int>(a);

由于无法从任何参数(在本例中为T)推导出模板类型std::string,因此您需要明确定义它。

答案 1 :(得分:0)

您尚未提供模板参数。请注意,在C ++ 11中,您可以使用std::stoi

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