以下のプログラムでのクラスcalは、整数型の配列を保持し、その中から最大値と最少値を取得できるクラスである。このクラスをテンプレートを使って、double,stringなど、あらゆる型で同じ処理ができるクラス、calを作り、処理を書き換えなさい。。。
という問題
そこで、参考を見ながら、作ったコードが以下です。
//sample.h FILE #ifndef CAL #define CAL template<typename T> class cal { private: T *marray; T mlength; public: cal(int* array, int length); ~cal(); T getmax(); T getmin(); void show(); }; #endif //sample.cpp FILE #include"sample.h" #include<iostream> using namespace std; template<typename T> cal<T>::cal(int* array, int length) { marray = new int[length]; mlength = length; for (int i = 0; i < mlength; i++) { marray = array[i]; } } template<typename T>cal<T>::~cal() { delete[]marray; } template<typename T>T cal<T>::getmax() { int max =marray[0]; for (int i = 0; i < 5; i++) { if (max <= marray[i]) { max = marray[i]; } } return max; } template<typename T>T cal<T>::getmin() { int min = marray[0]; for (int i = 0; i < 5; i++) { if (min >= marray[i]) { min = marray[i]; } } return min; } template<typename T> void cal<T>::show() { for (int i = 0; i < 5; i++) { cout << marray[i] << "" << endl; } } //main.cpp FILE #include"sample.h" #include<iostream> using namespace std; int main(){ int array[]= { 1,5,4,2,3 }; cal<int>* c = new cal<int>(array, 5); c->show(); cout << c->getmax() << endl; cout << c->getmin()<< endl; }
結果として、プログラムは実行できなかった。
エラーは、未解決の外部シンボルが4つあると出たが、なにが未解決か自分ではわからなかった。
ちなみに、実行前の各ファイルには、エラーは出ていない。
追加して、sample.cpp ファイルでの、各関数の定義部分で、このtemplate<typename T>を毎回入れる書き方も正しいのか。。。
詳しい方で、ぜひ教えていただきたいです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。