错误:使用已删除的函数'std :: basic_ofstream <char>&amp;删除了std :: basic_ofstream <char> :: operator =(const std :: basic_ofstream <char>&amp;)'ofstream

时间:2017-03-29 08:36:55

标签: c++11 g++

MainActivity

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

  

错误:使用已删除的函数'std :: basic_ofstream&amp;   的std :: basic_ofstream ::运算符=(const的   std :: basic_ofstream&amp;)'Map [name] = std :: move(ofs);

     

/ usr / include / c ++ / 4.9 / fstream:602:11:注意:'std :: basic_ofstream&amp;   的std :: basic_ofstream ::运算符=(const的   std :: basic_ofstream&amp;)'被隐式删除,因为默认值   定义将是不正确的:        class basic_ofstream:public basic_ostream&lt; _CharT,_Traits&gt;

1 个答案:

答案 0 :(得分:3)

GCC 5.1中添加了对移动iostream的支持,因此您无法使用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 |流缓冲区| Y |
27.7 |格式化和操纵器|部分|缺少移动和交换操作缺少get_time和put_time操纵器 27.8 |基于字符串的流|部分|缺少移动和交换操作
27.9 |基于文件的流|部分|缺少移动和交换操作

GCC 5.x支持它并且运行正常,所以你必须做错了(可能忘记使用-std=c++11,或者指向4.9标题,这肯定是行不通的。)