boost :: thread无效使用非静态成员函数

时间:2014-11-14 14:32:06

标签: c++ boost

我开始使用boost :: thread库,我有一个像这样的代码:

Class::Class()
{
    ...
    boost::thread thread_foo(Class::foo);
    ...
}

Class::foo()
{
    //do stuff
}

但是当我编译它时,我有一个“无效使用非静态成员函数”,我真的不知道出了什么问题,因为当我查看doc时,这是创建一个线程的方法。 / p>

我确定这是一个愚蠢的错误,但我只是没有看到它。

由于

2 个答案:

答案 0 :(得分:4)

你也应该发送对象。

boost::thread thread_foo(&Class::foo, this);

boost::thread thread_foo(boost::bind(&Class::foo, this));

答案 1 :(得分:3)

所有非静态成员函数都有一个隐藏的第一个参数,即成员函数中的this指针。

如果你没有提供实例来调用成员函数,那么this将是未定义的,你将undefined behavior

另一方面,

Statis成员函数没有这个隐藏的参数,因此可以在没有实例的情况下调用它。

要解决您的问题,请先收听编译器消息并使您的成员函数保持静态。或者您将参数传递给线程函数,该参数必须是调用该函数的实例(通常为this)。