C++线程:无法将参数 1 从 'const std::ofstream' 转换为 'std::ofstream &'
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 &amp;'
注意:转换失去限定词
我能够通过执行const_cast
来修复第二个参数a
,但我无法弄清楚如何修复第一个参数。
谢谢!
问题是您的lambda捕获是按价值捕获的,对于外档来说是不可能的。尝试通过参考捕获:
return thread ([&]{ writeToFile(outFile, a);});
这里有2个问题:
-
按值捕获时,捕获的对象默认为
const
,尽管您可以按照该问题的最高答案所示。 -
按值捕获对象复制对象,但是
ofstream
是不可复制的。因此,即使您修复了第一个问题,您也会收到有关第二期的新错误消息。
如其他答案所述,您可以通过参考捕获。但是,您需要谨慎地确保在螺纹完成之前不会破坏原始对象;而且,在启动线程和其他线程之间没有种族条件(同时不受保护的访问)。
相关文章:
- std::ofstream 作为类成员删除复制构造函数?
- C++:std::ofstream 方法 open() 在第二次迭代时擦除打开的 ifstream 文件
- 如何在 std::ofstream 和 std::cerr 之间切换
- 为什么将字符串输出到未命名的 std::ofstream 反而给了我一个十六进制数?
- 如何使用 std::cout 或 std::ofstream 作为单个函数的输入?
- 将 boost stream_buffer 与 std::ofstream 结合使用
- 对 std::ofstream 进行空文件检查
- 将 std::ofstream 对象作为参数传递给类方法
- 为什么 std::ofstream 会在没有 std::ios_base::trunc 的情况下截断?
- std :: ofstream,覆盖错误的文件行
- std :: ofstream-没有比1023(即时冲洗)更长的缓冲字符串
- 如何超载std :: ofstream :: put()
- 返回"Cannot convert from 'std::ofstream {aka std::basic_ofstream<char>}' to bool"错误
- std::ofstream 会自动在 之后添加回车符 (CR; \r)
- std::ofstream 追加文件
- 使用std:ofstream时,将目录的副本检查到文件中
- C++线程:无法将参数 1 从 'const std::ofstream' 转换为 'std::ofstream &'
- 为浮点数配置std :: ofStream格式
- 重定向std:cout到std::ofstream,得到一个错误
- 使用std :: ofstream中的c 中的float变量输出