1

It is a C++ code, why line 3 has an error:

template struct sum used without template parameters

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

Line 1 has no template parameters, but it has no error.

Thanks !

4

1 回答 1

5

第 3 行试图使用类模板的成员。

编译器可以/将(至少尝试)推断函数模板参数的类型。在少数情况下,它无法推断出类型,因此您需要显式指定它。

编译器不会尝试推断类模板参数的类型。

因此,第 3 行需要类似于sum<int>::foo(1, 2);. 它本身sum只是类模板的名称,而不是类的名称。前面的::名称必须是类(或命名空间)的名称。

于 2013-09-20T21:36:48.477 回答