C++ 为什么我的模板函数在此调用中不是有效匹配项?

C++ 为什么我的模板函数在此调用中不是有效匹配项?,c++,function,templates,return,C++,Function,Templates,Return,我编写了以下代码将数字转换为字符串并反转 在代码的注释部分,我想将函数类型设置为模板 认为它将根据上下文获取类型“例如,如果我指定 对于int变量,函数的类型为int“,但这不会发生在编译器中 给出错误消息 D:\computer science\project\stringToint.cpp In function 'int main()': 49 25 D:\computer science\project\stringToint.cpp [Error] no matching func

我编写了以下代码将数字转换为字符串并反转 在代码的注释部分,我想将函数类型设置为模板 认为它将根据上下文获取类型“例如,如果我指定 对于int变量,函数的类型为int“,但这不会发生在编译器中 给出错误消息

D:\computer science\project\stringToint.cpp In function 'int main()':
49  25  D:\computer science\project\stringToint.cpp [Error] no matching function for call to 'intstr(const char [10])'
49  25  D:\computer science\project\stringToint.cpp [Error] candidate is:
17  21  D:\computer science\project\stringToint.cpp template<class T> T intstr(std::string)
函数“int main()”中的
D:\computer science\project\stringToint.cpp:
49 25 D:\computer science\project\stringToint.cpp[错误]调用“intstr(const char[10])”时没有匹配的函数
49 25 D:\computer science\project\stringToint.cpp[错误]候选人是:
17 21 D:\computer science\project\stringToint.cpp模板T intstr(std::string)
我认为他们使用stringstream对象是错误的 但我成功地实现了功能,如果 我指定了函数的类型,但这将使我编写 每种类型都有不同的功能

是我想了解一些事情请帮忙

#include<iostream>
#include<string>
#include<sstream>
using namespace std;

template<typename T> 
string strint (T oty)
{
    string ity;
    stringstream ss;
    ss<<oty;
    ss>>ity;
    return ity;
}
/*
template<typename T> 
T intstr (string oty)
{
    T ity;
    stringstream ss;
    ss<<oty;
    ss>>ity;
    return ity;
}
*/
int intstr (string oty)
{
    int ity;
    stringstream ss;
    ss<<oty;
    ss>>ity;
    return ity;
}
signed char charstr (string oty)
{
    signed char ity;
    stringstream ss;
    ss<<oty;
    ss>>ity;
    return ity;
}
int main()
{
    int i;
    signed char c;
    string s;
    s=strint(123);
    cout<<s<<endl;
    i=intstr("123456789");
    cout<<i<<endl;
    c=charstr("2");
    cout<<c;
    return 0;
}
#包括
#包括
#包括
使用名称空间std;
模板
弦乐
{
弦长;
细流ss;
不稳定;
回归性;
}
/*
模板
T intstr(字符串oty)
{
真实性;
细流ss;
不稳定;
回归性;
}
*/
int intstr(字符串oty)
{
完整性;
细流ss;
不稳定;
回归性;
}
有符号字符(字符串oty)
{
符号特征;
细流ss;
不稳定;
回归性;
}
int main()
{
int i;
签名字符c;
字符串s;
s=strint(123);

cout您应该显式地为函数指定模板参数,因为编译器不能
推断
t,因为在函数参数中没有
t
类型的参数

intstr<int>("123456789");
intstr(“123456789”);

您应该显式地为函数指定模板参数,因为编译器不能
推断出
t,因为在函数参数中没有
t
类型的参数

intstr<int>("123456789");
intstr(“123456789”);

谢谢@ForEveR我现在将我的代码缩减为这样,它运行良好 我希望这是将数字转换成弦乐和虎钳诗的最佳解决方案 使用stringstream 非常感谢

#include<iostream>
#include<string>
#include<sstream>
using namespace std;

template<typename T1,typename T2> 
T2 strint (T1 oty)
{
    T2 ity;
    stringstream ss;
    ss<<oty;
    ss>>ity;
    return ity;
}

int main()
{ 
    cout<< strint <string,int>("1234") <<endl;
    cout<< strint <int,string>(456) <<endl;
    cout<< strint <string,float>("3.14") <<endl;
    cout<< strint <string,char>("3") <<endl;
    return 0;
}
#包括
#包括
#包括
使用名称空间std;
模板
T2大步(T1大步)
{
T2细胞凋亡;
细流ss;
不稳定;
回归性;
}
int main()
{ 

cout谢谢@ForEveR我现在把我的代码简化成这样,它工作得很好 我希望这是将数字转换成弦乐和虎钳诗的最佳解决方案 使用stringstream 非常感谢

#include<iostream>
#include<string>
#include<sstream>
using namespace std;

template<typename T1,typename T2> 
T2 strint (T1 oty)
{
    T2 ity;
    stringstream ss;
    ss<<oty;
    ss>>ity;
    return ity;
}

int main()
{ 
    cout<< strint <string,int>("1234") <<endl;
    cout<< strint <int,string>(456) <<endl;
    cout<< strint <string,float>("3.14") <<endl;
    cout<< strint <string,char>("3") <<endl;
    return 0;
}
#包括
#包括
#包括
使用名称空间std;
模板
T2大步(T1大步)
{
T2细胞凋亡;
细流ss;
不稳定;
回归性;
}
int main()
{ 

coutok谢谢,但是为什么编译器说没有匹配的函数来调用'intstr@AhmedMazher因为,如果只有模板版本-没有模板参数就不能调用它。好的,谢谢,但是为什么编译器说没有匹配的函数来调用'intstr@AhmedMazher因为,如果只有模板版本,则无法调用它没有模板参数。我不理解这些否决票。有一小段代码暴露问题,提供了错误消息。这里问的第一个问题很好。我不理解这些否决票。有一小段代码暴露问题,提供了错误消息。这里问的第一个问题很好。