1

「オーバーロードされた関数「printArray」のインスタンスが引数リストに一致しません。理由を教えてください」というエラーが表示され続けます。テンプレート関数をオーバーロードして、指定された位置で開始および終了する配列の要素を表示しようとしています。

最初のテンプレートと関数があります。

template< typename T >
void printArray( const T *array, int count )

そして、私がオーバーロードしようとしている関数。

template< typename T >
void printArray(int lowSubscript, int highSubscript)

と私の電話:

// display elements 1-3 of array a
   cout << "Array a from positions 1 to 3 is:\n";
   elements = printArray(1,3);

最初のprintArrayを呼び出しても、エラーは表示されません。

// display array a using original printArray function
   cout << "\nUsing original printArray function\n";
   printArray( a, ACOUNT );
4

2 に答える 2

6

の 2 番目のオーバーロードprintArrayはテンプレートですが、署名はテンプレート パラメーターに依存していませんT。したがって、呼び出すときに指定する必要がありますprintArray<int>(1,3)

ただし、どの配列が印刷されているかは不明です。たとえば、配列のパラメーターを追加するのを忘れましたprintArray(a,1,3)か? Tその場合、バージョンにあるように、そのパラメーターから推測できる場合がありますprintArray(a,count)

また、戻り値の型は、テンプレート パラメーターが推測できたとしても、void記述できないことを意味します。elements=printArray(1,3)

于 2012-04-17T21:04:34.350 に答える
3

2 つ目printArrayは T を使用しないため、テンプレートにするべきではありません。

コンパイラがそれを候補として認識しないのは、T を推測できないためです。

于 2012-04-17T21:04:49.163 に答える