मैं अपने नवीनतम जीसीसी जी ++ compilers, (संस्करण> 6)जांच करें कि धारा संदर्भ शून्य संकलन नहीं है अब और
वहाँ एक वर्ग CodeWriter
एक ostream
संदर्भ चर के साथ है के साथ एक पुरानी परियोजना संकलन कर रहा हूँ।
class CodeWriter
{
//private:
protected:
ostream &m_stream;
public:
CodeWriter(ostream &stream):m_stream(stream){}
~CodeWriter(){
if(m_stream != NULL){
m_stream.flush();
}
}
};
कक्षा काफी बड़ी है इसलिए मैंने केवल प्रासंगिक चर और कार्यों को शामिल किया।
जैसा कि आप देख सकते हैं कि विनाशक NULL
के संदर्भ की तुलना कर रहा है। इस प्रोजेक्ट ने ठीक संकलित किया जब मैंने पुराने gnu टूलचेन के साथ इसे लंबे समय तक उपयोग किया।
लेकिन अब यह एक त्रुटि फेंक रहा है कि से ostream
और long int
की तुलना करने के लिए कोई मिलान नहीं है।
कोई भी बदलाव के पीछे तर्क को समझा सकता है, और मैं इसे कैसे ठीक कर सकता हूं?
मुझे अतिरिक्त जानकारी प्रदान करने में खुशी होगी/यदि आवश्यक हो तो पूरी कक्षा शामिल करें।
आप कोड गलत - यह NULL के खिलाफ धारा वस्तु (जो किसी प्रकार का या किसी अन्य के एक अतिभारित ऑपरेटर लागू करेगा) तुलना करती है। शून्य संदर्भ के रूप में ऐसी कोई चीज़ नहीं है (और इसलिए, एक की जांच करना संभव नहीं है) –
पुन: "मैंने केवल प्रासंगिक चर और फ़ंक्शंस को शामिल किया" हां! धन्यवाद! बिल्कुल सही! –
यह भी ध्यान दें कि _pointers_ को शून्य करने के लिए तुलना करने के लिए आपको अब 'nullptr' का उपयोग C++ 11 या बाद में मैक्रो 'NULL' के बजाय करना चाहिए। (हाँ मुझे पता है कि आपके पास कोई सूचक नहीं है लेकिन मैं आपकी शून्य जांच के इरादे से बात कर रहा हूं)। –