私がやりたいのは、条件が満たされた場合に、構造のベクトル上の構造の1つのフィールドを置き換えることです。だからここに私のコードがあります:
struct DataST{
int S_num,Charge,Duplicate_Nu;
float PEP;
string PEPTIDE;
vector<MZIntensityPair> pairs;
bool GetByT(const DataST& r,int T)
{
switch (T)
{
case 1:
return (S_num == r.S_num);
case 2:
return (Charge == r.Charge);
case 3:
return !(PEPTIDE.compare(r.PEPTIDE));
case 4:
return (Duplicate_Nu == r.Duplicate_Nu);
case 5:
return ((S_num == r.S_num)&&(Charge == r.Charge));
default:
return false;
}
}
};
int main()
{
.
.
vector<DataST> spectrums;
.
.
DataST tempDT_dup;
tempDT_dup.PEPTIDE="Test";
replace_if(spectrums.begin(), spectrums.end(), boost::bind(&DataST::GetByT, _1,tempDT_dup,3),11);
.
.
}
したがって、この例では、スペクトルアイテムのすべてのDuplicate_Nuを11に変更したいのですが、そのアイテムのPEPTIDEファイルが "test"に等しい場合、操作 "="の代わりに関数GetByTを使用したいときに、以下のエラーが発生しました。
/usr/include/c++/4.6/bits/stl_algo.h:4985:4:エラー:'_ firstの'operator='に一致しません。_gnu_cxx :: __ normal_iterator <_Iterator、_Container> :: operator * with _Iterator = DataST *、_Container = std :: vector、__gnu_cxx :: __ normal_iterator <_Iterator、_Container> :: reference = DataST&= __new_value 4.6 / bits / stl_algo.h:4985:4:注:候補は:hello_pwiz / hello_pwiz.cpp:14:8:注:DataST&DataST :: operator =(const DataST&)hello_pwiz / hello_pwiz.cpp:14:8:注:'int DataST ::*const'から'constDataST&'への引数1の既知の変換はありません</ p>