2017-03-29 15 views
1
std::map<std::string, std::ofstream> Map; 
std::string name="name"; 
std::ofstream ofs(name,std::ios::app); 
Map[name] = std::move(ofs); 

を削除ofstreamの。 -std = C++ 11を使用して、Ubuntu12.04およびg ++ - 5(gccバージョン5.4.1 20160904(Ubuntu 5.4.1-2ubuntu1〜12.04))のg ++​​ 4.9でコンパイルしました。エラー:削除された機能の使用「のstd :: basic_ofstream <char>&はstd :: basic_ofstream <char> ::演算子=(定数のstd :: basic_ofstream <char>&)」私は上記のコードを実行しますが、それは失敗し

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>

+0

g ++バージョン固有のように見えます。 VS 2013と[g ++ - 5.1](http://coliru.stacked-crooked.com/a/c83e8a3939ac3115)でビルドしますか? – acraig5075

答えて

3

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 |ストリームバッファ| Y |
27.7 |フォーマットとマニピュレータ|パーシャル|行方不明の移動およびスワップ操作get_timeおよびput_timeマニピュレータがありません。
27.8 |ストリングベースのストリーム|パーシャル|行方不明の移動とスワップ操作
27.9 |ファイルベースのストリーム|パーシャル|移動やスワップ操作がありません

これはGCC 5.xでサポートされていますので、何か間違っている必要があります(おそらく-std=c++11を使用することを忘れているか、間違いなく動作しない4.9ヘッダーを指している)。

関連する問題