2015-06-25 46 views
1

我只是試圖編譯在Linux下面的代碼:的std :: stringstream的reasignment在Windows上有完美的成功後的Visual Studio 2013的作品,但不是在Linux下

std::string str = stream.str(); 

auto decrement = [](char c) { return c - 100; }; 

std::transform(str.begin(), str.end(), str.begin(), decrement); 
stream = std::stringstream(str); // LINE ACCUSING ERROR 

我收到試圖reasign錯誤在std :: stringstream的是:

158: error: use of deleted function 'std::basic_stringstream& std::basic_stringstream::operator=(const std::basic_stringstream&)' stream = std::stringstream(str); ^

+0

什麼是你的Linux編譯器版本?它支持C++ 11嗎? – vsoftco

+0

發現這個笨蛋:http://stackoverflow.com/q/27152263/3093378 – vsoftco

回答

3

std::stringstream是不可拷貝,但可以是僅移動(因爲C++ 11)。我的猜測是你使用g ++ 4.9或更早版本,即使它支持C++ 11,它也不完全支持流的移動語義。 g ++ 5和更高版本編譯您的代碼。

報告的bug可以追溯到4.7,固定在5.x的https://gcc.gnu.org/bugzilla/show_bug.cgi?id=54316

+0

我更新到g ++ 5,我的代碼編譯。但現在它甚至不會超過一開始。它無法在'std :: thread'上創建一個線程。我如何更新STL? –

+0

嘗試使用-pthread。不確定,否則,可以嘗試一個簡單的例子,並提出一個不同的問題。 – vsoftco

相關問題