Я компиляции устаревший проект с моим последним Gcc г ++ компиляторов (версия> 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 toolchain.
Но теперь это ошибка, говорящая о том, что нет operator !=
, чтобы сравнить ostream
и long int
.
Может ли кто-нибудь объяснить обоснование изменений и как я могу это исправить?
Я был бы рад предоставить дополнительную информацию/включить весь класс, если потребуется.
Вы неправильно понимаете код - он сравнивает объект потока с NULL (который будет вызывать перегруженный оператор того или иного типа). Нет такой вещи, как нулевая ссылка (и поэтому ее невозможно проверить) –
Re: «Я включил только соответствующие переменные и функции» Да! Спасибо! Абсолютно верно! –
Также обратите внимание, что для сравнения _pointers_ с нулем вы должны использовать 'nullptr' сейчас в C++ 11 или более поздней версии вместо макроса' NULL'. (да, я знаю, что у вас нет указателя, но я говорю с намерением вашей нулевой проверки). –