मैं इस नक्शे को जो MSVC10 में ठीक संकलित है:क्या std :: ofstream movable है?
std::map<std::string, std::ofstream> m_logFiles;
लेकिन ubuntu पर का उपयोग कर जी ++ 4.5 के साथ C++ 0x सक्षम हो, तो मैं निम्न त्रुटि संदेश मिलता है:
/usr/शामिल/C++/4.5/बिट्स/ios_base.h | 785 | त्रुटि: 'std :: ios_base :: ios_base (स्थिरांक std :: & ios_base)' निजी
वस्तुओं के बजाय संकेत का उपयोग करके है, मैं समस्या हल हो गई।
वेब पर खोज, मैंने सीखा कि धाराओं की प्रतिलिपि बनाने के लिए नहीं हैं (क्यों अच्छी तरह से समझाया गया था)। लेकिन मेरा सवाल है, std :: एक चलने योग्य प्रकार की धारा है? यदि ऐसा है, तो क्या इसे मानक कंटेनर में टेम्पलेट पैरामीटर के रूप में उपयोग करने की अनुमति नहीं देनी चाहिए?
यदि हां, तो इस बिंदु पर MSVC10 के पीछे g ++ है? (जो समझाएगा कि यह एमएसवीसी पर क्यों काम करता है)। मुझे पता है कि कंपाइलर लेखकों से कुछ भी पूरी तरह लागू करने के लिए यह मूर्खतापूर्ण होगा जो कि अंतिम भी नहीं है, लेकिन मैं भविष्य के बारे में उत्सुक हूं।
जी ++ 4.6.1 का उपयोग करने में मदद नहीं मिली।
संपादित करें: टिप्पणियों को पढ़ने के लिए मैंने थोड़ा और खोला और पाया कि डालने से समस्या का कारण बन रहा है, मानचित्र की घोषणा नहीं।
#include <string>
#include <fstream>
#include <map>
using namespace std;
int main()
{
map<string, ofstream> m_logFiles;
ofstream st;
m_logFiles.insert(make_pair<string, ofstream>(string("a"), move(st)));
return 0;
}
लेकिन फिर भी प्रयास विफल:
पढ़ना Cubbi के लिंक मैं निम्नलिखित की कोशिश की। जी ++ बी हटाए गए प्रतिलिपि निर्माता के उपयोग के बारे में शिकायत करता है।
जीसीसी 4.6.1 में ठीक संकलित करता है। –
पोस्ट कोड जीसीसी 4.5.3 में ठीक से संकलित करता है। हालांकि, जीसीसी के पुस्तकालय (बजना के libC++ के विपरीत) अभी तक लागू नहीं किया गया है map.emplace() http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44436 - शायद कि क्या त्रुटि संदेश के कारण होता है? – Cubbi
@ कब्बी: मैंने आपका लिंक पढ़ा और std :: move का उपयोग करने का प्रयास किया, लेकिन कोई बदलाव नहीं हुआ। –