使用std::shared_ptr和std::线程时编译错误
Compiler error using std::shared_ptr with std::thread
我正在尝试使用Test
类的shared_ptr
启动线程,并且我得到此错误:
/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
注意:在windows与VS2013工作良好第一个例子。
这看起来像是您正在使用的gcc版本中的一个错误,因为它应该可以工作。看看http://ideone.com/GOQ35M它确实可以
作为一种变通方法,您可以尝试std::shared_ptr<Test> test = std::make_shared<Test>();
std::thread th(std::bind(&Test::run, test))
相关文章:
- std::is_base_of表示ctor编译错误
- 关于std::move的使用,是否有编译警告
- std::experimental::source_location 在编译时
- C++如果必须在编译时确定大小,std::array 有什么意义?
- std::vector::p ush_back() 不会在 MSVC 上编译具有已删除移动构造函数的对象
- std::cout输出int时出现编译错误
- 在缺少函数重载时抛出异常,并带有 std::variant 而不是编译时错误
- std::unique_ptr 在 GCC 中工作,但不能在 Visual Studio 中编译
- 确保编译时的特定 std::array 位置
- 编译器不会使用 -std=c++11 编译智能指针
- GCC 8.3 无法编译 std::bind_front
- 使用 std::enable_if 限制派生类的模板参数时出现编译错误
- 使用 CImg 库的 std::min 和 std::max 的编译问题
- std::less是否应该允许在编译时比较不相关的指针?
- 为什么 std::make_shared 无法编译带有已删除运算符 new 的类型?
- std::variant<>::get() 不能使用 Apple LLVM 10.0 编译
- 对带有唯一指针的 std::thread 使用类成员函数时出现编译错误
- QString和stdstring组合在std::编译错误中不起作用
- 使用typedef和std编译错误
- std::编译期间设置的数组类成员