C++ std::mem_fun_ref问题:作为成员函数调用时作为函子工作

C++ std::mem_fun_ref问题:作为成员函数调用时作为函子工作,c++,stl,mem-fun,C++,Stl,Mem Fun,问题是以下代码段中的编译器错误 这里有一个非常简单的程序,可以用随机整数填充列表并增加每个元素。每次调用函子时,我都使用std::for_递增集合中的每个成员和所有已编译的对象。关注main()中的for_。接下来,我只是将for_each改为call List::increment,而不是functor increment(注意main中注释掉的代码)。对于这个任务,我使用mem_fun_ref,因为我处理的不是指针的集合,而是类的集合。而且我不认为我需要bind1st或bind2nd 以下是

问题是以下代码段中的编译器错误

这里有一个非常简单的程序,可以用随机整数填充列表并增加每个元素。每次调用函子时,我都使用std::for_递增集合中的每个成员和所有已编译的对象。关注main()中的for_。接下来,我只是将for_each改为call List::increment,而不是functor increment(注意main中注释掉的代码)。对于这个任务,我使用mem_fun_ref,因为我处理的不是指针的集合,而是类的集合。而且我不认为我需要bind1st或bind2nd

以下是我的编译器错误:

/usr/lib/gcc/i686 pc cygwin/3.4.4/include/c++/bits/stl_algo.h:函数内函数std::for_each(_inputiator,_inputiator,_inputiator,_function)[带_inputiator=std:_List_迭代器,_function=std::mem_fun1 ref_t]':blahblah.cpp:53:从此处实例化

/usr/lib/gcc/i686 pc cygwin/3.4.4/include/c++/bits/stl_algo.h:158:错误:调用(std::mem_fun1_ref_t)(unsigned int&)不匹配

/usr/lib/gcc/i686 pc cygwin/3.4.4/include/c++/bits/stl_function.h:826:注:候选函数为:void std::mem_fun1_ref_t::operator()(_Tp&,_Arg)const[带_Tp=List,_Arg=unsigned int&]

#include <list>
#include <string>
#include <algorithm>
#include <functional>
#include <iostream>

static const unsigned int LIST_SIZE = 25;

typedef std::list<unsigned int> List_t;

class List
{
    public:
        List() {};
        ~List() {};
        void push_back(unsigned int in) {m_list.push_back(in);};
        List_t::iterator begin( ) {m_list.begin();}
        List_t::iterator end( ) {m_list.end();};
        void print_list ( ) const
        {
            std::cout << std::endl;
            for (List_t::const_iterator iter = m_list.begin(); iter != m_list.end(); ++iter)
            {
                std::cout << *iter << ' ';
            }
            std::cout << std::endl << std::endl;

        }
        void increment( unsigned int & input)
        {
            ++input;
        }
    private:
        List_t m_list;
};
struct Increment{
    void operator ()(unsigned int &input)
    {
       ++input;
    }
};

int main()
{
    List l;
    for (unsigned int i= 0; i <= LIST_SIZE; i++)
    {
        unsigned int x = rand() % 100;
        l.push_back(x);
    }
    l.print_list(); // pre incremented
    //for_each(l.begin(),l.end(),Increment());
    for_each(l.begin(),l.end(),std::mem_fun_ref(&List::increment));
    l.print_list(); // incremented
    return 1;
}
#包括
#包括
#包括
#包括
#包括
静态常量unsigned int LIST_SIZE=25;
typedef std::list\t;
班级名单
{
公众:
列表(){};
~List(){};
void push_back(无符号int in){m_list.push_back(in);};
List_t::迭代器begin(){m_List.begin();}
迭代器end(){m_List.end();};
无效打印列表()常量
{

std::cout
mem\u fun\u ref
for\u一起使用时,每个
都希望拥有每个单独项目的成员函数,而不是容器类本身的成员函数


为什么您需要increment成为
列表的成员呢?
?它不在其状态下运行。我想说它作为一个自由的函子是非常好的。

mem\u fun\u ref
for\u结合使用时,每个
都希望拥有每个单独项的成员函数,而不是容器类本身的成员函数

static void increment(unsigned int &input)
{
    ++input;
}

int main()
{
    List l;
    for (unsigned int i= 0; i <= LIST_SIZE; i++)
    {
        unsigned int x = rand() % 100;
        l.push_back(x);
    }
    l.print_list(); // pre incremented
    for_each(l.begin(),l.end(),std::ptr_fun(&increment));
    l.print_list(); // incremented
    return 1;
}
为什么您需要increment成为
列表的成员?
?它不在其状态下运行。我认为它作为一个自由函子非常好。

静态无效增量(unsigned int&input)
static void increment(unsigned int &input)
{
    ++input;
}

int main()
{
    List l;
    for (unsigned int i= 0; i <= LIST_SIZE; i++)
    {
        unsigned int x = rand() % 100;
        l.push_back(x);
    }
    l.print_list(); // pre incremented
    for_each(l.begin(),l.end(),std::ptr_fun(&increment));
    l.print_list(); // incremented
    return 1;
}
{ ++输入; } int main() { 清单l; 对于(无符号整数i=0;i
静态无效增量)(无符号整数和输入)
{
++输入;
}
int main()
{
清单l;

对于(unsigned int i=0;i这是示例代码。我确实想对状态进行操作,但我没有为我的示例设计它。这是示例代码。我确实想对状态进行操作,但我没有为我的示例设计它。我如何更改每个调用的上述内容,以便编译时不会出现上面列出的错误。我如何更改每个调用的上述内容,以使没有上面列出的错误。