1

これは C++ コードです。3 行目にエラーがある理由は次のとおりです。

テンプレート パラメータなしで使用されるテンプレート struct sum

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 にはテンプレート パラメーターがありませんが、エラーはありません。

ありがとう !

4

1 に答える 1

5

3 行目は、クラス テンプレートのメンバーを使用しようとしています。

コンパイラは、関数テンプレート パラメーターの型を推測できます (少なくとも試行します)。場合によっては、型を推測できないため、明示的に指定する必要があります。

コンパイラは、クラス テンプレート パラメーターの型を推測しようとしません。

したがって、3 行目は のようにする必要がありますsum<int>::foo(1, 2);。それ自体でsumは、クラスの名前ではなく、クラス テンプレートの名前にすぎません。の前の::名前は、クラス (または名前空間) の名前である必要があります。

于 2013-09-20T21:36:48.477 に答える