2011-10-28 12 views
3

私の目的は、for_each呼び出しでメンバー関数を使用することです。だから私はこのようにそれをやった:std :: for_eachで使用するメンバー関数をバインドするにはどうすればよいですか?

for_each(an_island->cells.cbegin(),an_island->cells.cend(),std::bind(&nurikabe::fill_adjacent,this)); 

が、これは私がGCCで得るものです:

In file included from /usr/lib/gcc/i686-pc-linux-gnu/4.5.1/../../../../include/c++/4.5.1/algorithm:63:0, 
       from prog.cpp:10: 
/usr/lib/gcc/i686-pc-linux-gnu/4.5.1/../../../../include/c++/4.5.1/bits/stl_algo.h: In function '_Funct std::for_each(_IIter, _IIter, _Funct) [with _IIter = std::_Rb_tree_const_iterator<std::pair<int, int> >, _Funct = std::_Bind<std::_Mem_fn<int (nurikabe::*)(std::pair<int, int>)>(nurikabe*)>]': 
prog.cpp:85:103: instantiated from here 
/usr/lib/gcc/i686-pc-linux-gnu/4.5.1/../../../../include/c++/4.5.1/bits/stl_algo.h:4185:2: error: no match for call to '(std::_Bind<std::_Mem_fn<int (nurikabe::*)(std::pair<int, int>)>(nurikabe*)>) (const std::pair<int, int>&)' 

とVS2010で、この:

xxresult(28): error C2825: '_Fty': must be a class or namespace when followed by '::' 

完全な源泉コードがhere

です

助けが必要ですか?

答えて

4

nurikabe::fill_adjacentは、実質的に2つの引数(nurikabe*cell)をとりますが、最初のものだけを渡しています。そのように、cellのためのプレースホルダを使用します。

for_each(
    an_island->cells.cbegin(), 
    an_island->cells.cend(), 
    std::bind(&nurikabe::fill_adjacent, this, _1) 
); 

_1は、名前空間std::placeholdersに存在することに注意してください。)

+0

を私がのstd ::プレースホルダは、:: _ '1(_1' '、以来、動作しませんでした'使用) – vivek

+1

@vivek:だからこそ、名前空間がどの名前空間にあるのかを言いました。そのため、それを完全に修飾する方法や、usingディレクティブを作成する名前空間を知っているはずです。 : - ] – ildjarn

関連する問題