Russian Qt Forum

Qt => Общие вопросы => Тема начата: Winstrol от Март 02, 2007, 16:06



Название: QDataStream
Отправлено: Winstrol от Март 02, 2007, 16:06
Перешел с Qt 3.3.2 на 3.3.8 (Заранее оговорюсь,что включил опции QT_LARGEFILE_SUPPORT и QT_ABI_QT4)

Такой код падает на строке aaa.close();
Код:

{
QFile aaa("aaaa");
aaa.open(IO_ReadWrite | IO_Append | IO_Truncate);
QDataStream bbb;
bbb.setDevice(&aaa);
//bbb.unsetDevice();
aaa.close();
}

А если раскомментировать unsetDevice, то работает. А я его никогда раньше не вызывал - все работало.  Почему так происходит? Я не вразумлю никак.

В качестве пищи для размышления
Код:

void QDataStream::setDevice(QIODevice *d )
{
    if ( owndev ) {
delete dev;
owndev = FALSE;
    }
    dev = d;
}
void QDataStream::unsetDevice()
{
    setDevice( 0 );
}


Переменная owndev всюду ==  false

добавлено спустя 1 час 5 минут:

 Вопрос снят.


Название: QDataStream
Отправлено: zabivator от Март 02, 2007, 17:44
Как решили проблему?


Название: QDataStream
Отправлено: Winstrol от Март 02, 2007, 18:17
Цитата: "zabivator"
Как решили проблему?

Дефайны QT_LARGEFILE_SUPPORT и QT_ABI_QT4 (я только их опцией  configure задал при перекомпиляции qt), оказалось, надо либо вручную добавлять к каждому проекту, либо раз и навсегда модифицировать qmake.conf. Проблемы возникали из-за некорректной линковки.

добавлено спустя 23 минуты:

 
Цитата: "zabivator"
Как решили?

Если Вы спрашиваете, как решил проблемы с некоррекной линковкой, то, как уже сообщал,  поправил qmake.conf
Код:

DEFINES += UNICODE WIN32 [b]QT_LARGEFILE_SUPPORT QT_ABI_QT4 [/b]

Шляпа в том, что неверные заголовочные файлы(где QFile::offset=int) не приводили к ошибкам линкера, но исполнямый файл оказывался безнадежно испорченым.