gpt4 book ai didi

c++11 - 错误 : use of deleted function ‘std::basic_ofstream& std::basic_ofstream::operator=(const std::basic_ofstream&)’ ofstream deleted

转载 作者:行者123 更新时间:2023-12-04 02:06:25 27 4
gpt4 key购买 nike

std::map<std::string, std::ofstream> Map;
std::string name="name";
std::ofstream ofs(name,std::ios::app);
Map[name] = std::move(ofs);

我运行上面的代码但失败了。我使用 -std=c++11 在 Ubuntu12.04 和 g++-5(gcc 版本 5.4.1 20160904(Ubuntu 5.4.1-2ubuntu1~12.04))上通过 g++ 4.9 编译它,这会导致下面相同的错误消息。

error: use of deleted function ‘std::basic_ofstream& std::basic_ofstream::operator=(const std::basic_ofstream&)’ Map[name] = std::move(ofs);

/usr/include/c++/4.9/fstream:602:11: note: ‘std::basic_ofstream& std::basic_ofstream::operator=(const std::basic_ofstream&)’ is implicitly deleted because the default definition would be ill-formed: class basic_ofstream : public basic_ostream<_CharT,_Traits>

最佳答案

移动 iostream 的支持已添加到 GCC 5.1,因此您无法使用 GCC 4.9 执行此操作。这记录在 4.9 版的 libstdc++ 手册中:https://gcc.gnu.org/onlinedocs/gcc-4.9.4/libstdc++/manual/manual/status.html#status.iso.2011

27.5 | Iostreams 基类 |部分| basic_ios 上缺少移动和交换操作。缺少 io_errc 和 iostream_category。 ios_base::failure 不是从 system_error 派生的。缺少 ios_base::hexfloat。
27.6 |流缓冲区 |是 |
27.7 |格式化和操纵器 |部分|缺少移动和交换操作缺少 get_time 和 put_time 操纵器。
27.8 |基于字符串的流 |部分|缺少移动和交换操作
27.9 |基于文件的流 |部分|缺少移动和交换操作

它在 GCC 5.x 中受支持并且工作正常,所以你一定是做错了什么(可能忘记使用 -std=c++11,或者将它指向 4.9 header 肯定不行)。

关于c++11 - 错误 : use of deleted function ‘std::basic_ofstream<char>& std::basic_ofstream<char>::operator=(const std::basic_ofstream<char>&)’ ofstream deleted,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43088414/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com