绑定到boost :: function类成员编译错误

时间:2014-05-30 20:36:40

标签: c++ boost-bind boost-function

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()中给出错误?

谢谢

2 个答案:

答案 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);