0

C++ テンプレートの学習を開始しています。今、私は C++ テンプレートの簡単な例をコンパイルしようとしています。

#include <iostream.h>
template <class T> class pair1 {
     T value1, value2;
public:
    pair1 (T first, T second) {
        value1=first;
        value2=second;
    }
    T getmax ();
};

template <class T> 
T pair1::getmax (){
     T retval;
    retval = value1>value2? value1 : value2;
    return retval;
}
int main(){
     pair1<int> myobject (100, 75);
    cout << myobject.getmax()<<endl;
system("pause");
return 0;
}

次の 2 つのエラーが発生しました。

  • (1) エラー C2955: 'pair1': テンプレートの使用にはテンプレート引数リストが必要です
  • (2) エラー C2244:'pair1::getmax': 関数定義を既存の宣言と一致させることができません

Visual Studio 2010 を使用しています。

次のようにインライン関数を使用すると、問題なく動作しました。

#include <iostream.h>
template <class T> class pair1 {
     T value1, value2;
public:
    pair1 (T first, T second) {
        value1=first;
        value2=second;
    }
   **T getmax (){ T retval;
retval = value1>value2? value1 : value2;
return retval;};**
};


int main(){
     pair1<int> myobject (100, 75);
    cout << myobject.getmax()<<endl;
system("pause");
return 0;
}

ただし、この状況ではインライン関数を使用しないことを好みます。C++ テンプレート コードの最初のブロックの何が問題なのかを誰かが教えてくれることを願っています。

4

1 に答える 1

1

クラスにはテンプレート パラメータを使用する必要があります。

template <class T> 
T pair1<T>::getmax (){
     T retval;
    retval = value1>value2? value1 : value2;
    return retval;
}
于 2013-02-28T06:39:50.180 に答える