Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: Scotty от Октябрь 24, 2009, 22:54



Название: Простите не понимаю где я ошибся?
Отправлено: Scotty от Октябрь 24, 2009, 22:54
Доброго времени суток !!!
Код:
int TestSuite::openFile(QString aFileName){
    //Get file info from file name such as Path and Full Name and set fields of class
    QFileInfo vFileInfo(aFileName);
    this->gFilePath = vFileInfo.canonicalPath() ;
    this->gFileName = vFileInfo.fileName();

    QFile * vFile = new QFile(aFileName);
    qDebug() << "Opened : " + this->gFileName;
    qDebug() << "Path : " + this->gFilePath;

    if (vFile->exists()){
        if (!vFile->open(QIODevice::ReadOnly)){
            qDebug() << QString("File opened: ") + vFile->fileName();
            return 2; //file exists but we can't open
        }
    } else{
        qDebug() << QString("File not exists:") + vFile->fileName();
        return 1; //file not exists
    }
    //now we set content to XML object
    if (!gTestSuite->setContent(vFile)){
        vFile->close();
        qDebug() << "Can't set context!";
        return 3; // Can't set context to xml object file
    } else{
        vFile->close();
        qDebug() << "Context is set!";
    }
    return 0;
}

А вот код консольного приложения которое юзает этот класс:

Код:
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    TestSuite * ts = new TestSuite;
    qDebug() << ts->openFile(QString("E:/Exam/Exam/ExamTest/1.xml"));

    return a.exec();
}

Вылетает с такой вот красотой :
  Имя события проблемы:   APPCRASH
  Имя приложения:   ExamTest.exe
  Версия приложения:   0.0.0.0
  Отметка времени приложения:   4ae35aa2
  Имя модуля с ошибкой:   QtXmld4.dll
  Версия модуля с ошибкой:   4.5.2.0
  Отметка времени модуля с ошибкой:   4a3f7c18
  Код исключения:   c0000005
  Смещение исключения:   00017be7
  Версия ОС:   6.1.7600.2.0.0.256.1
  Код языка:   1049
  Дополнительные сведения 1:   0a9e
  Дополнительные сведения 2:   0a9e372d3b4ad19135b953a78882e789
  Дополнительные сведения 3:   0a9e
  Дополнительные сведения 4:   0a9e372d3b4ad19135b953a78882e789

Внимание вопрос: ПОЧЕМУ ???  Нефига не понимаю почему такое произошло ... и как с этим бороться ... подскажите пожалуйста ... просто пробовал сделать тестовый прогон классов


Название: Re: Простите не понимаю где я ошибся?
Отправлено: BRE от Октябрь 24, 2009, 23:08
А где создается объект gTestSuite? В конструкторе или нигде?


Название: Re: Простите не понимаю где я ошибся?
Отправлено: Scotty от Октябрь 24, 2009, 23:14
Это поле - ссылка на объект, я может и не правильно делаю (я новичек в Qt и C++ тоже :) ) но у меня класс описан так
Код:
class TestSuite{
public:
    TestSuite();
    int openFile(QString aFileName);
    /*Тут много всякого*/
private:
    QString gFilePath;
    QString gFileName;
   /*и тут тоже*/
protected:
    QDomDocument * gTestSuite;
};
Наставьте меня пожалуйста на путь истенный  :-[


Название: Re: Простите не понимаю где я ошибся?
Отправлено: BRE от Октябрь 24, 2009, 23:15
Это поле - ссылка на объект, я может и не правильно делаю (я новичек в Qt и C++ тоже :) ) но у меня класс описан так
Указатель ты описал, а где объект создаешь?
Код
C++ (Qt)
gTestSuite = new QDomDocument;
 
Или нигде не создаешь?


Название: Re: Простите не понимаю где я ошибся?
Отправлено: Scotty от Октябрь 24, 2009, 23:20
ОЙ! :) Вот я Отстойник  :-X Прошу прощения за глуппость, просто замылились мозги  ::) Благодарю за терпение и толерантность, забыл в конструкторе написать создание объекта QDomDocument'а ... этож надо быть таким д***оё*ом! Ещё раз огромное спасибо!!!


Название: Re: Простите не понимаю где я ошибся?
Отправлено: ax от Октябрь 25, 2009, 17:51
// я бы добавил
delete vFile;



Название: Re: Простите не понимаю где я ошибся?
Отправлено: BRE от Октябрь 25, 2009, 18:19
// я бы добавил
delete vFile;
Лучше его вообще на стеке определить.