这是一个C ++代码,为什么第3行有错误:
模板结构和不使用模板参数
template<class T> void foo(T op1, T op2)
{
cout<< "op1 = " << op1 << endl;
cout<< "op2 = " << op2 << endl;
}
template<class T>
struct sum
{
static void foo(T op1 , T op2)
{
cout << "sum is " << op1 << endl;
}
};
int main()
{
foo(1,3); // line 1
foo<int>(1, '3'); // line 2
sum::foo(1,2); // line 3
return 0;
}
第1行没有模板参数,但没有错误。
谢谢!
答案 0 :(得分:5)
第3行正在尝试使用类模板的成员。
编译器可以/将(至少尝试)推断出函数模板参数的类型。在少数情况下,它无法推断出类型,因此您需要明确指定它。
编译器将不尝试推断类模板参数的类型。
因此,第3行必须类似于sum<int>::foo(1, 2);
。就其本身而言,sum
只是类模板的名称,而不是类的名称。 ::
之前的名称必须是类(或命名空间)的名称。