Mam kompilacji przestarzały projekt z mojego najnowszego gcc, g ++ kompilatory (wersja> 6)Sprawdź, czy referencyjny strumień jest NULL nie skompilować już
istnieje klasa CodeWriter
ze zmienną ostream
odniesienia.
class CodeWriter
{
//private:
protected:
ostream &m_stream;
public:
CodeWriter(ostream &stream):m_stream(stream){}
~CodeWriter(){
if(m_stream != NULL){
m_stream.flush();
}
}
};
Klasa jest dość duża, więc uwzględniłem tylko odpowiednie zmienne i funkcje.
Jak widać, destruktor wydaje się porównywać odniesienie do NULL
. Ten projekt świetnie się spisał, gdy użyłem go z powrotem ze starym toolchainem gnu.
Ale teraz rzuca błąd, mówiąc, że nie ma dopasowania operator !=
do porównania ostream
i long int
.
Czy ktoś może wyjaśnić racjonalne uzasadnienie zmiany i jak mogę to naprawić?
Chętnie udzielę dodatkowych informacji/uwzględnię całą klasę, jeśli będzie to wymagane.
Źle zrozumiesz kod - porównuje obiekt strumienia z wartością NULL (która wywoła przeciążony operator w pewnym lub innym rodzaju). Nie ma czegoś takiego jak referencja zerowa (a więc nie można tego sprawdzić). –
Re: "Uwzględniłem tylko odpowiednie zmienne i funkcje" Tak! Dziękuję Ci! Dokładnie tak! –
Należy również zauważyć, że dla porównania _pointers_ do null powinieneś używać 'nullptr' teraz w C++ 11 lub nowszym zamiast makra' NULL'. (Tak, wiem, że nie masz wskaźnika, ale mówię do celu twojego czeku zerowego). –