問題是編譯器錯誤,下面的代碼片段。std :: mem_fun_ref問題:當作爲函數調用時作爲成員函數調用
這是一個非常簡單的程序,用隨機整數填充列表並增加每個元素。我使用一個函數的std :: for_each來增加我的集合的每個成員,並且全部編譯。關注main()中的for_each。接下來,我簡單地改變for_each來調用List :: increment而不是函子Increment(注意主註釋掉的代碼)。對於這個任務,我使用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)[與_InputIterator =標準:: _ List_iterator,_Function =標準:: mem_fun1_ref_t]':blahblah.cpp:53:從這裏
/usr/lib/gcc/i686-pc-cygwin/3.4實例化。 (std :: mem_fun1_ref_t)(unsigned int &)'
/usr/lib/gcc/i686-pc-cygwin/usr/4/include/C++/bits/stl_algo.h:158:error: 3.4.4 /包括/ C++ /比特/ stl_fu nction.h:826:注意:候選是:空隙的std :: mem_fun1_ref_t ::運算符()(_ TP &,_Arg)const的[與_TP =列表,_Arg =無符號整型&]
#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;
}
問題是? – 2011-04-04 20:31:57
如何更改上面的for_each調用以便在沒有上面列出的錯誤的情況下進行編譯。 – 2011-04-04 20:40:36