2012-04-17 19 views
1

オーバーロードされた関数 "printArray"のインスタンスがない場合、引き続き引数リストと一致します。 。起動し、指定した位置に終わる配列オーバーロードされたテンプレート関数ヘルプ - C++

は、私は私の最初のテンプレートと機能があります。

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); 
+0

を推定できないので、第二 'printArray'(および' elements'に渡された配列があるように思われないようであるコンパイラはそれを認識しない

理由はされています戻り値の型が 'void'の関数から返された値を代入します)。 – hmjd

+0

タイプを含むエラーメッセージを投稿してください。 – jpalecek

答えて

6

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

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

また、戻り値の型がvoidの場合、テンプレートパラメータを推測できる場合でも、elements=printArray(1,3)と書くことはできません。

+0

ありがとう、それは私がそれを把握するのに役立ちました。 – Kyle

3

あなたの2番目のprintArrayはTを使用しないので、テンプレートではありません。候補は、それはT.

関連する問題