I have a struct like this:
struct A {
void i(int i) {}
void s(string const &s) {}
};
Now when I try this:
bind1st(mem_fun(&A::i), &a)(0);
bind1st(mem_fun(&A::s), &a)("");
The first line compiles OK, but the second generates an error:
c:program files (x86)microsoft visual studio 10.0vcincludexfunctional(299): error C2535: 'void std::binder1st<_Fn2>::operator ()(const std::basic_string<_Elem,_Traits,_Ax> &) const' : member function already defined or declared
with
[
_Fn2=std::mem_fun1_t<void,A,const std::string &>,
_Elem=char,
_Traits=std::char_traits<char>,
_Ax=std::allocator<char>
]
c:program files (x86)microsoft visual studio 10.0vcincludexfunctional(293) : see declaration of 'std::binder1st<_Fn2>::operator ()'
with
[
_Fn2=std::mem_fun1_t<void,A,const std::string &>
]
c:worksourcesexceptionestexceptionmain.cpp(33) : see reference to class template instantiation 'std::binder1st<_Fn2>' being compiled
with
[
_Fn2=std::mem_fun1_t<void,A,const std::string &>
]
What could be the problem? How could I fix it?
Edit:
It seems that any reference argument is a problem. So if I change the i
method to void i(int &i) {}
I get a similar error.
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…