boost::function<void()> test_func;
struct test_t
{
boost::function<void(int)> foo_;
void test()
{
// This works as expected
test_func = boost::bind(test_t::foo_, 1);
}
};
int main(int argc, _TCHAR* argv[])
{
test_t test;
test.test();
// error C2597: illegal reference to non-static member 'test_t::foo_'
test_func = boost::bind(test_t::foo_, &test, 1);
const auto a = 0;
return 0;
}
代码有什么问题?为什么代码test_func = boost :: bind(test_t :: foo_,&amp; test,1);在test_t :: test()中编译并在main()中给出错误?
谢谢
答案 0 :(得分:0)
这是因为方法test_t::foo_
内部引用了this->foo_
,而test_t::foo_
中的main
只能引用foo_
该类的静态成员。你需要在那里写test.foo_
。
答案 1 :(得分:0)
问题或多或少是错误所说的。 test_t::foo_
不是一个功能;它是一个仿函数(函数对象),它不是静态的。因此,如果没有test_t
对象,则无法访问它。试试这个:
test_func = boost::bind(test.foo_, 1);