我編譯一個過時的項目,我的最新的gcc G ++編譯器(版本> 6)檢查流引用爲null不會編譯了
有一類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工具鏈回來。
但現在它拋出一個錯誤,說沒有匹配的operator !=
來比較ostream
和long int
。
任何人都可以解釋變化背後的基本原理,以及我如何解決這個問題?
如果需要,我很樂意提供更多信息/包括整個班級。
您誤解了代碼 - 它將流對象與NULL進行比較(將調用某種或另一種重載操作符)。沒有這樣的事情作爲空引用(所以,它是不可能檢查一個) –
回覆:「我只包括相關的變量和函數」是的!謝謝!非常正確! –
另請注意,爲了將_pointers_與null進行比較,您應該在C++ 11或更高版本中使用'nullptr',而不是使用'NULL'宏。 (是的,我知道你沒有指針,但我正在說你的空檢查的意圖)。 –