Хобрук: Ваш путь к мастерству в программировании

Режим выпуска QTextStream и Visual Studio 2008

У меня есть простой код, использующий 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м с использованием 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

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

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

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

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

const bool opened = qfile.open( QIODevice::ReadOnly | QIODevice::Text);
assert( opened );
05.12.2010
  • Каждый делает это хотя бы раз. Утверждения полезны, но также и немного вредны. 06.12.2010
  • Да, никогда не используйте assert() в условиях, не зависящих от приложения, таких как состояние файловой системы, входные данные, действия пользователя и т. д. Но эта проблема, конечно, может возникнуть и при полностью корректном использовании assert(). 06.12.2010
  • Спасибо за помощь! Это решило мою проблему, я не знал, что утверждение пропускается в режиме выпуска. 06.12.2010
  • Новые материалы

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

    Как свинг-трейдеры могут использовать ИИ для больших выигрышей
    По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

    Как построить любой стол
    Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...

    Обзор: Машинное обучение: классификация
    Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

    Разработка расширений Qlik Sense с qExt
    Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..