QTextStream и режим выпуска Visual Studio 2008 - PullRequest
1 голос
/ 06 декабря 2010

У меня есть простой код, использующий QTextStream, и он отлично работает в Visual Studio в режиме отладки, но если я переведу его в режим выпуска, он не t read anything from the file. I included QtCore4.lib for the release mode and for the debug mode QtCored4.lib. I m использует Qt4.6.3 vs2008, в чем может быть проблема, если он работает в режиме отладки? Я вставляю код ниже:

#include <iterator>
#include <QFile>
#include <QTextStream>
#include <QString>
#include<iostream>
#include<fstream>
#include<iterator>
#include<assert.h>
#include<stdio.h>
using namespace std;
void main()
{

 QString qsArgsFile = "curexp.txt",line;
 QByteArray baline;
 cout<<qsArgsFile.toAscii().data();
 QFile qfile( qsArgsFile );
    assert(qfile.open( QIODevice::ReadOnly | QIODevice::Text));
    QTextStream stream( &qfile );
 baline = qfile.read(50);
 const char *liner;
    while(!(line = stream.readLine()).isNull()) 
      if (!line.isEmpty()) {
    baline = line.toLatin1();
    liner = baline.data();
        cout << liner << endl;
    }

1 Ответ

2 голосов
/ 06 декабря 2010

Это потому, что вы помещаете код с побочными эффектами в утверждение:

assert(qfile.open( QIODevice::ReadOnly | QIODevice::Text));

Этот код никогда не выполняется в режиме выпуска. Не только утверждения отключены, но и код внутри них не выполняется! Правило: никогда не помещайте ничего с побочными эффектами в assert (). Это первое, что нужно искать, когда что-то работает в режиме отладки, но не в режиме выпуска.

Если вы хотите утверждать, сделайте это так:

const bool opened = qfile.open( QIODevice::ReadOnly | QIODevice::Text);
assert( opened );
...