構造体vectorの入れ子のfillの使い方
構造体vectorの入れ子のfillの使い方
vectorデータのメモリを確保する関数をテンプレート関数で作ったのですが、構造体の入れ子vectorのデータの時、ビルドが通りません。
構造体や入れ子vectorの時のfillの使い方が間違っているようですが、理由がわかりません。直し方を教えて下さい!
ソースコード
-------------------------------------------------------------
#include <vector>
using namespace std;
struct aa{
float x; float y;
aa& operator = (const aa& rhs)
{
if (this == &rhs) return *this;
x = rhs.x; y = rhs.y;
return *this;
};
};
template<typename T1, typename T2> bool getM(
vector<T1>& vDat, const T2 datN )
{
bool bRet = true;
try{
vDat.resize( datN );
}catch( bad_alloc ){
return false;
}
fill( vDat.begin(), vDat.end(), 0x0 );
return bRet;
}
template bool getM<aa, int> ( vector<aa>& vDat, const int datN );
template bool getM<vector<aa>, int> ( vector< vector<aa> >& vDat, const int datN );
int main()
{
vector< vector<aa> > data;
data.clear();
if( false == getM( data, 10 ) ) return -1;
for( int i = 0; i < 10; i++ ){
if( false == getM( data.at(i), 20 ) ) return -1;
for( int j = 0; j < 20; j++ ){
data.at(i).at(j).x = 1.;
data.at(i).at(j).y = 1.;
}
}
return 0;
}
エラーメッセージ
-------------------------------------------------------------
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
main.cpp:
エラー E2285 c:\Borland\Bcc55\include\algorith.cc 519: 'aa::operator =(const int
)' に一致するものが見つからない(関数 fill<aa *,int>(aa *,aa *,const int &) )
警告 W8057 c:\Borland\Bcc55\include\algorith.cc 520: パラメータ 'value' は一度も
使用されない(関数 fill<aa *,int>(aa *,aa *,const int &) )
エラー E2285 c:\Borland\Bcc55\include\algorith.cc 519: 'vector<aa,allocator<aa>
>::operator =(const int)' に一致するものが見つからない(関数 fill<vector<aa,alloc
ator<aa> > *,int>(vector<aa,allocator<aa> > *,vector<aa,allocator<aa> > *,const
int &) )
警告 W8057 c:\Borland\Bcc55\include\algorith.cc 520: パラメータ 'value' は一度も
使用されない(関数 fill<vector<aa,allocator<aa> > *,int>(vector<aa,allocator<aa>
> *,vector<aa,allocator<aa> > *,const int &) )
*** 2 errors in Compile ***
お礼
おっしゃる通りです。。 確かにエラーは当然の結果ですね。 わかり易い説明をありがとうございました。 ちなみに sub.cppに template double sub_t(const vector<double>&); を記述して template引数として何が使われるかわかるようにsub.cppをコンパイルする方法もあるみたいですね。 hファイルに実装するか、上記のように実体をつくるか、検討してみます。