我使用for_each和mem_fun_ref作为例子,但编译时有一些错误,问题是什么
#include<iostream>
#include<algorithm>
#include<set>
#include<iterator>
using namespace std;
class Tst
{
public:
Tst(int a, string b):n(a),s(b)
{}
bool operator<(const Tst& t)const
{
return this->n < t.n;
}
int GetN()const
{
return n;
}
string GetS()const
{
return s;
}
void SetN(int a)
{
n = a;
}
void SetName(string name)
{
s = name;
}
void Print(void)
{
cout <<"n is:" << n <<"\ts is:" << s << endl;
}
private:
int n;
string s;
};
int main(void)
{
typedef set<Tst> TstSet;
TstSet tst;
tst.insert(Tst(10, "abc"));
tst.insert(Tst(1, "def"));
for_each(tst.begin(), tst.end(), mem_fun_ref(&Tst::Print));
return true;
}
:4200:错误:对'(std :: mem_fun_ref_t)(const Tst&amp;)'的调用没有匹配,是什么原因
答案 0 :(得分:4)
std::set
包含的对象为const
,因此您只能在其上调用const
个函数。您的Print
功能应标记为const
。
答案 1 :(得分:0)
该功能应为const
,因为std::set
仅适用于const
个对象
void Print(void)const
{
}