2013-01-14 14 views
7

मैं Visual Studio 2012 निम्नलिखित बूस्ट Signals2 कोड के साथ अंतिम उपयोग कर रहा हूँ:Visual Studio 2012 सी ++ बूस्ट के साथ त्रुटि संकलन signal2

c:\program files (x86)\microsoft visual studio 11.0\vc\include\xmemory(348): error C4996: 'std::_Uninitialized_copy0': Function call with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how to use Visual C++ 'Checked Iterators' 
1>   c:\program files (x86)\microsoft visual studio 11.0\vc\include\xmemory(333) : see declaration of 'std::_Uninitialized_copy0' 
1>   c:\libraries\boost_1_52_0\boost\signals2\detail\auto_buffer.hpp(192) : see reference to function template instantiation '_FwdIt std::uninitialized_copy<I,boost::variant<T0_,T1>*>(_InIt,_InIt,_FwdIt)' being compiled 

दृश्य स्टूडियो के लिए इस कोड को संगत नहीं है: https://github.com/cfobel/boost_signals2/blob/master/hello_world_0.cpp पर यह निम्न त्रुटि उत्पन्न करता है 2012 सी ++? क्या यह अभी भी उपयोग करने के लिए सुरक्षित है? अंत में, मैं सुझावों के अनुसार सुझाव कैसे बना सकता हूं? धन्यवाद

उत्तर

9

C4996 एक फ़ंक्शन का उपयोग करने के बारे में एक चेतावनी है जिसे बहिष्कृत किया गया है। चूंकि आप इसे एक त्रुटि के रूप में देख रहे हैं, शायद आपके पास Treat Warning as Error (/WX) विकल्प सक्षम है?

इस को अक्षम करने का तरीका त्रुटि संदेश में ही वर्णित है। प्रोजेक्ट की प्रीप्रोसेसर परिभाषाओं के लिए _SCL_SECURE_NO_WARNINGS प्रतीक जोड़ें।

+3

बहुत उपयोगी उत्तर लेकिन * "क्या यह अभी भी सुरक्षित है?" * पर स्पर्श नहीं किया। दूसरे शब्दों में, boost :: signals2 के बारे में क्या यह चेतावनी पैदा कर रहा है और क्या लोगों को इसके बारे में चिंतित होना चाहिए? – sgryzko

+1

@sgryzko * यह सुरक्षित है * के लिए कोई सामान्य उत्तर नहीं है, यह प्रश्न में कोड पर निर्भर करता है। क्या कोड में एक बग है जिसके परिणामस्वरूप बफर ओवरफ़्लो हो सकता है? यदि हां, तो एमएसवीसी फ़ंक्शन बेहतर हो सकते हैं। यदि नहीं, तो 'std :: uninitialized_copy' उपयोग करने के लिए बिल्कुल सुरक्षित है। ये चेतावनियां किसी भी कोड से बचने के लिए असंभव हैं, जिन्हें आप कई कंपाइलर्स पर संकलित करने में सक्षम होना चाहते हैं, क्योंकि एमएसवीसी 'std :: copy' जैसी चीजों के बारे में शिकायत भी करेगा (यह चाहता है कि आप 'std :: _ copy_s' का उपयोग करें)। – Praetorian

+0

@sgryzko और हेवी-रॉकर-दोस्त ... क्या आप में से कोई भी इस समस्या को हल करता है? मुझे अब एक ही समस्या है: वीएस -2010 परियोजना को बूस्ट :: सिग्नल का उपयोग करके VS2013 में परिवर्तित किया गया है, और यह चेतावनी हर जगह दिखाई दे रही है। मैं चेतावनियां बंद नहीं करना चाहता ... मैं कोड को चेतावनी मुक्त रूप से संकलित करने के लिए चाहता हूं। कोई विचार? अग्रिम में Thx। –

संबंधित मुद्दे