宜しくお願いいたします。
設計の良し悪しはともかく、任意の型の配列に格納された全ての値の平均値を求めるプログラムを書いたのですが、
コンパイルが通らず、原因が調べております。
VC++2010を使用しています。
また、必要なinclude等は省略しています。
/************
Helper.h
************/
using namespace std;
class Helper {
public:
/** 配列の平均を計算 */
template < typename T > static T getAverage( const int, T* );
private:
/** コンストラクタ(実装禁止) */
Helper();
/** デストラクタ(実装禁止) */
~Helper();
};
/************
Helper.cpp
************/
#include "Helper.h"
using namespace std;
template < typename T > T Helper::getAverage( const int dataNum, T *ptr ) {
T sum = *ptr;
for( int i = 1; i < dataNum; i++ ) {
sum += *( ptr + i );
}
return sum / dataNum;
}
/************
main.cpp
************/
#include "Helper.h"
using namespace std;
int _tmain( int argc, _TCHAR* argv[] ) {
/** 省略 */
vector< double > test( 3, 0,5 );
test.push_back( 0.3 );
test.push_back( 0.2 );
test.push_back( 0.1 );
double ave = Helper::getAverage( test.size(), test.data() );
cout << "平均: " << ave << endl;
}
Helper::getAverage( const int, T *ptr )を呼び出さない限りはエラーとはなりません。
エラーは2つ出ており、
① error LNK2028: 未解決のトークン (0A0001A8) "public: static double __cdecl Helper::getAverage<double>(int,double *)" (??$getAverage@N@Helper@@$$FSANHPAN@Z) が関数 "int __cdecl wmain(int,wchar_t * * const)" (?wmain@@$$HYAHHQAPA_W@Z) で参照されました。
② error LNK2019: 未解決の外部シンボル "public: static double __cdecl Helper::getAverage<double>(int,double *)" (??$getAverage@N@Helper@@$$FSANHPAN@Z) が関数 "int __cdecl wmain(int,wchar_t * * const)" (?wmain@@$$HYAHHQAPA_W@Z) で参照されました。
というものです。
また、呼び出し方を変え、Helper::getAverage< double >( const int, T *ptr )とやってみましたがダメでした。
テンプレート関数の戻り値とポインタ引数に原因があるのではと睨んでいるのですが…。
分かる方、ご教授頂けると幸いです。
宜しくお願いいたします。