[英]Threading in C++ : cannot convert argument 1 from 'const std::ofstream' to 'std::ofstream &'
我有一个类可以在线程上写入文件
class A{
public:
void writeToFile(ofstream& outFile, obj &a)
{
//...
}
thread memberThread1(ofstream& outFile, obj &a)
{
cout << "Thread 1 is now running " << endl;
return thread ([=]{ writeToFile(outFile, a);});
}
};
我在lambda函数上遇到了一些错误。
无法将参数1从'const std :: ofstream'转换为'std :: ofstream&'
注意:转换会失去预选赛
我可以通过执行const_cast
来修复第二个参数a
,但是我不知道如何修复第一个参数。
谢谢!
问题在于您的lambda捕获是按值捕获的,对于outFile是不可能的。 尝试通过引用捕获:
return thread ([&]{ writeToFile(outFile, a);});
这里有两个问题:
按值捕获时, 捕获的对象默认为const
,尽管您可以更改该值,如该问题的最高答案所示。
按值捕获将复制对象,但是ofstream
是不可复制的。 因此,即使您解决了第一期问题,您也会收到有关第二期问题的新错误消息。
正如其他答案所指出的,您可以改为通过引用捕获。 但是,您需要注意确保在线程完成之前不会破坏原始对象。 并且在启动的线程和其他线程之间没有竞争条件(并发未保护的访问)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.