使用std :: shared_ptr和std :: thread编译错误

时间:2014-05-30 20:29:20

标签: c++ c++11

我尝试使用课程shared_ptr中的Test启动帖子,我收到此错误:

  

/usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/include/g++-v4/functional:559:2: note: no known conversion for argument 1 from 'std::shared_ptr<Test>' to 'std::shared_ptr<Test>&'

示例代码:

    std::shared_ptr<Test> test = std::make_shared<Test>();
    std::thread th(&Test::run, test); // Compiler error


    Test* test2 = new Test;
    std::thread th(&Test::run, test2); // okay

注意:在VS2013的Windows中,第一个例子可以正常工作。

1 个答案:

答案 0 :(得分:3)

这看起来像你正在使用的gcc版本中的一个错误,因为它应该可以工作。看http://ideone.com/GOQ35M它确实有用

作为解决方法,您可以尝试

std::shared_ptr<Test> test = std::make_shared<Test>();
std::thread th(std::bind(&Test::run, test))