gpt4 book ai didi

c++ - std::mem_fun_ref 问题:作为成员函数调用时作为仿函数损坏

转载 作者:行者123 更新时间:2023-11-28 01:07:01 25 4
gpt4 key购买 nike

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

这是一个非常简单的程序,用随机整数填充列表并递增每个元素。我使用 std::for_each 调用仿函数来递增我的集合中的每个成员并全部编译。关注 main() 中的 for_each。接下来,我简单地更改 for_each 以调用 List::increment 而不是仿函数 Increment(注意 main 中注释掉的代码)。对于这个任务,我使用 mem_fun_ref 因为我不是在处理指针的集合而是类的集合。另外,我认为我不需要 bind1st 或 bind2nd。

这是我的编译器错误:

/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/bits/STL_algo.h: 在函数 _Function std::for_each(_InputIterator, _InputIterator, _Function) [with _InputIterator = std: :_List_iterator, _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 [with _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;
}

最佳答案

mem_fun_reffor_each 一起希望拥有一个成员函数每个单独的项目,而不是容器类本身。

为什么需要increment才能成为List的成员?它不在其状态下运行。我会说它作为一个自由仿函数是完全没问题的。

关于c++ - std::mem_fun_ref 问题:作为成员函数调用时作为仿函数损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5543957/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com