2016-04-23 11 views
0

次のコードの最初のif文の式にエラー(識別子 "isEqualTo"は未定義です)が発生します。与えられたコードのエラー(識別子は未定義です)の取得

'template <typename T> 
T isEqualTo<bool>(T arg1, T arg2) 
{ 
    if (arg1 == arg2) 
    return true; 
    else 
    return false; 
} 

int main() 
{ 
int i1 = 1, i2 = -1, i3 = 2, i4 = 4; 

cout << "*** Integers Tests ***\n"; 

if (isEqualTo(i1, i1)) 
    cout << "Integers: " << i1 << " and " << i1 << " are equal\n"; 
else 
    cout << "Integers: " << i1 << " and " << i1 << " are \"Not\" equal\n"; 

if (isEqualTo(i3, i4)) 
    cout << "Integers: " << i3 << " and " << i4 << " are equal\n"; 
else 
    cout << "Integers: " << i3 << " and " << i4 << " are \"Not\" equal\n";' 

私が間違っていることを誰かに教えてもらえますか?どのように修正できますか?

答えて

0
template <typename T> 
T isEqualTo<bool>(T arg1, T arg2) 

これは、既存のテンプレートisEqualToの特化を宣言しています。残念ながら、あなたはこのテンプレートを定義していません。

これは、コンパイラのエラーメッセージです(逐語的です)。 isEqualToテンプレートが定義されていません。

テンプレートを特殊化する前に定義する必要があります。

+0

という理由でこのエラーが発生する可能性はありますか?これを削除するとこのエラーはなくなるためです。しかし、私はあなたのユーザー定義型では、式の場合、新しいエラーを取得します。 –

+0

はい。ここには「」を含めてはいけません。コンパイラはそれをインスタンス化し、実際の引数の型からTを決定します。 – gdlmx

+0

私はそれをインクルードしないと、自分の引数がユーザ定義のクラスのオブジェクトであるif文にエラー(式がbool型でなければならない)を得る。 –

関連する問題