benim son gcc g ++ derleyici, (sürüm> 6)Kontrol akışı referans artık
sınıf CodeWriter
bir ostream
referans değişkeni ile vardır ile eski bir proje derleme am derleme değil null ise.
class CodeWriter
{
//private:
protected:
ostream &m_stream;
public:
CodeWriter(ostream &stream):m_stream(stream){}
~CodeWriter(){
if(m_stream != NULL){
m_stream.flush();
}
}
};
Sınıf oldukça büyük olduğundan yalnızca ilgili değişkenleri ve işlevleri ekledim.
Eğer yıkıcı görebileceğiniz gibi
NULL
başvurusunu karşılaştırarak gibi görünüyor. Bu proje eski gnu alet zinciriyle uzun süre kullanıldığında iyi bir şekilde derlenmiştir.
Ama şimdi ostream
ve long int
ile karşılaştırmak için eşleşen operator !=
olduğunu söyleyen bir hata atıyor.
kimse değişikliği ardındaki mantığı açıklayabilir ve bunu düzeltmek nasıl? Gerekirse ben ek bilgi sağlamak mutlu olurdu
/bütün sınıfı bulunmaktadır.
if (m_stream) {
m_stream.flush();
}
C++ 11
explicit
bool için dönüşüm yaptı:
Sen kodunu yanlış - bu (bir tür ya da başka bir aşırı operatörü çağıracağı) NULL karşı dere nesnesini karşılaştırır. Null referansı diye bir şey yoktur (ve bir tane de kontrol etmek mümkün değildir) –
Re: "Sadece ilgili değişkenleri ve fonksiyonları dahil ettim" Evet! Teşekkür ederim! Kesinlikle doğru! –
Ayrıca, _pointers_ ile null'ı karşılaştırmak için 'nullptr' değerini şimdi 'NULL' makrosu yerine C++ 11 veya daha sonra kullanmalısınız. (evet, orada bir işaretçiniz olmadığını biliyorum ama null çekinizin amacı ile konuşuyorum). –