前提・実現したいこと
現在C++を学習しており、テンプレートを利用してソースを書きました。
実行結果自体は正しいのですが、コンパイル時に出てしまう警告を解消したい為質問致しました。
ソースは、collection.h、main.cppです。
以下のサイトのproblex3-2について質問致します。
http://cpp-lang.sevendays-study.com/problemex3.html
以下問題文転載。↓
以下のプログラムでのクラスCollectionIntは、整数型の配列を保持し、その中から最大値と最少値を取得できるクラスである。このクラスをテンプレートを使って、double,stringなど、あらゆる型で同じ処理ができるクラス、collectionを作り、処理を書き換えなさい。
期待される実行結果
実数の場合
1.2 3.5 8.1 4.9 2.0 2.2
最大値 : 8.1
最小値 : 1.2
整数の場合
1 5 4 2 3
最大値 : 5
最小値 : 1
発生している問題・エラーメッセージ
In file included from main.cpp:2:
./Collection.h:52:5: warning: control reaches end of non-void function
[-Wreturn-type]
}
^
main.cpp:10:8: note: in instantiation of member function
'Collection<double>::showArray' requested here
c->showArray();
^
1 warning generated.
該当のソースコード
C++
1#ifndef _COLLECTION_H_ 2#define _COLLECTION_H_ 3#include <iostream> 4 5using namespace std; 6 7template<typename T>class Collection{ 8private: 9 // 配列データ 10 T* m_pArray; 11 // 配列の長さ 12 int m_length; 13public: 14 // コンストラクタ 15 Collection(T* array,int length){ 16 m_pArray = new T[length]; 17 m_length = length; 18 for(int i = 0; i < m_length ; i++){ 19 m_pArray[i] = array[i]; 20 } 21 }; 22 // デストラクタ 23 ~Collection(){ 24 delete[] m_pArray; 25 }; 26 // 最大値の取得 27 T getMax(){ 28 T max = m_pArray[0]; 29 for(int i = 0; i < m_length ; i++){ 30 if(max < m_pArray[i]){ 31 max = m_pArray[i]; 32 } 33 } 34 return max; 35 }; 36 // 最小値の取得 37 T getMin(){ 38 T min = m_pArray[0]; 39 for(int i = 0; i < m_length ; i++){ 40 if(min > m_pArray[i]){ 41 min = m_pArray[i]; 42 } 43 } 44 return min; 45 }; 46 // 成分の表示 47 T showArray(){ 48 for(int i = 0; i < m_length ; i++){ 49 cout << m_pArray[i] << " "; 50 } 51 cout << endl; 52 } 53}; 54 55#endif // _COLLECTION_H_ 56
C++
1#include <iostream> 2#include "Collection.h" 3 4using namespace std; 5 6int main(){ 7 // 配列変数の定義 8 double array[] = { 1.2,1.1,8.1,8.2,3.6 }; 9 Collection<double>* c = new Collection<double>(array,5); 10 c->showArray(); 11 cout << "最大値 : " << c->getMax() << endl; 12 cout << "最小値 : " << c->getMin() << endl; 13 delete c; 14 return 0; 15} 16
試したこと
テンプレートの呼び出し方が誤っているのではと考え、main.cpp7行目の
Collection<double>* c = new Collection<double>(array,5);
を
Collection* c = new Collection<double>(array,5);
や
Collection<double>* c = new Collection(array,5);
としましたが、エラーは出たままでした。
また、インスタンス生成が誤ってるのではと考え2行に分けて
Collection<double>* c;
c = new Collection<double>(array,5);
と書いてもやはり警告は発生しました。
実行時のコマンドは
g++ -c main.cpp -o main.o ←これを行うと警告が発生する。
g++ main.o
./a.out
です。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/20 05:11
2020/04/20 09:38 編集
2020/04/20 10:13
2020/04/20 10:27