【发布时间】:2026-02-22 16:05:02
【问题描述】:
我有一个这样的结构:
struct A {
void i(int i) {}
void s(string const &s) {}
};
现在当我尝试这个时:
bind1st(mem_fun(&A::i), &a)(0);
bind1st(mem_fun(&A::s), &a)("");
第一行编译OK,第二行报错:
c:\program files (x86)\microsoft visual studio 10.0\vc\include\xfunctional(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.0\vc\include\xfunctional(293) : see declaration of 'std::binder1st<_Fn2>::operator ()'
with
[
_Fn2=std::mem_fun1_t<void,A,const std::string &>
]
c:\work\sources\exception\test\exception\main.cpp(33) : see reference to class template instantiation 'std::binder1st<_Fn2>' being compiled
with
[
_Fn2=std::mem_fun1_t<void,A,const std::string &>
]
可能是什么问题?我该如何解决?
编辑:
似乎任何引用参数都是一个问题。因此,如果我将 i 方法更改为 void i(int &i) {} 我会收到类似的错误。
【问题讨论】:
-
鉴于我们是在 2011 年并且拥有 C++11,您可能想看看 C++11s
std::bind或boost::bind,它们使这些数量级的事情更容易处理。 -
@PlasmaHH:不幸的是,我不能在这个项目中使用 C++11。
标签: c++ visual-c++