for_each和mem_fun_ref麻烦

时间:2016-04-26 11:40:56

标签: c++ for-loop each

我使用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;)'的调用没有匹配,是什么原因

2 个答案:

答案 0 :(得分:4)

std::set包含的对象为const,因此您只能在其上调用const个函数。您的Print功能应标记为const

答案 1 :(得分:0)

该功能应为const,因为std::set仅适用于const个对象

void Print(void)const
{

}