Russian Qt Forum
Ноябрь 24, 2024, 05:55 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QXmlStreamReader::QXmlStreamReader(const QXmlStreamReader&)' is private  (Прочитано 3040 раз)
Gate007
Гость
« : Декабрь 11, 2011, 18:16 »

Возникла следующая ошибка, хвосты которой я не могу найти второй день.
Код:
Выполняется сборка проекта project1...
Настройки не изменились, этап qmake пропускается.
Запускается «E:\Qt\qtcreator-2.2.0\mingw\bin\mingw32-make.exe»
E:/Qt/qtcreator-2.2.0/mingw/bin/mingw32-make -f Makefile.Debug
mingw32-make[1]: Entering directory `E:/Qt/qtcreator-2.2.0/project1-build-desktop'
g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_XML_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"..\..\2010.05\qt\include\QtCore" -I"..\..\2010.05\qt\include\QtGui" -I"..\..\2010.05\qt\include\QtXml" -I"..\..\2010.05\qt\include" -I"..\..\2010.05\qt\include\ActiveQt" -I"debug" -I"." -I"..\project1" -I"." -I"..\..\2010.05\qt\mkspecs\win32-g++" -o debug\main.o ..\project1\main.cpp
g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_XML_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"..\..\2010.05\qt\include\QtCore" -I"..\..\2010.05\qt\include\QtGui" -I"..\..\2010.05\qt\include\QtXml" -I"..\..\2010.05\qt\include" -I"..\..\2010.05\qt\include\ActiveQt" -I"debug" -I"." -I"..\project1" -I"." -I"..\..\2010.05\qt\mkspecs\win32-g++" -o debug\mainwindow.o ..\project1\mainwindow.cpp
..\..\2010.05\qt\include\QtCore/../../src/corelib/xml/qxmlstream.h: In member function 'void MainWindow::parseXML()':
..\..\2010.05\qt\include\QtCore/../../src/corelib/xml/qxmlstream.h:404: error: 'QXmlStreamReader::QXmlStreamReader(const QXmlStreamReader&)' is private
..\project1\mainwindow.cpp:120: error: within this context
..\project1\mainwindow.cpp:120: error:   initializing argument 1 of 'UserInfo MainWindow::parsePerson(QXmlStreamReader)'
mingw32-make[1]: Leaving directory `E:/Qt/qtcreator-2.2.0/project1-build-desktop'
mingw32-make[1]: *** [debug/mainwindow.o] Error 1
mingw32-make: *** [debug] Error 2
Процесс «E:\Qt\qtcreator-2.2.0\mingw\bin\mingw32-make.exe» завершился с кодом 2.
Возникла ошибка при сборке проекта project1 (цель: Настольный компьютер)
Во время выполнения сборки на этапе «Сборка»

Поясню, что происходит в самой программе. Программа-база данных пользователей с 4 полями-логин, ФИО, пароль и соль. Вся информация хранится в файле XML вида
Код:
<Users>
<user>
<login></login>
<fio></fio>
<pass></pass>
<salt></salt>
</user>
</Users>
Проблема возникает когда я хочу подставить значение, возвращаемое одной функцией, в другую.
В .h файле:
Код:
class UserInfo // Объявление класса UserInfo, по сути аналог структуры.
{
public:
    QString name;
    QString pass;
    QString login;
    QString salt;
    bool isFull(QList<UserInfo>);
};

class MainWindow : public QMainWindow
{
....
QList<UserInfo> userList;
void parseXML();
UserInfo parsePerson(QXmlStreamReader);
...
};
Сами проблемные функции предназначены для чтения XML файла, вот они:
Код:
void MainWindow::parseXML() {
        /* We'll parse the myxml */
        QFile* file = new QFile("myxml");
        /* If we can't open it, let's show an error message. */
        if (!file->open(QIODevice::ReadOnly | QIODevice::Text)) {
                QMessageBox::critical(this,
                                      "Xml_read::parseXML",
                                      "Невозможно открыть файл базы данных.",
                                      QMessageBox::Ok);
                return;
        }
        /* QXmlStreamReader takes any QIODevice. */
        QXmlStreamReader xml(file);
        /* We'll parse the XML until we reach end of it.*/
        while(!xml.atEnd() &&
              !xml.hasError()) {
                /* Read next element.*/
                QXmlStreamReader::TokenType token = xml.readNext();
                /* If token is just StartDocument, we'll go to next.*/
                if(token == QXmlStreamReader::StartDocument) {
                        continue;
                }
                /* If token is StartElement, we'll see if we can read it.*/
                if(token == QXmlStreamReader::StartElement) {
                        /* If it's named persons, we'll go to the next.*/
                        if(xml.name() == "users") {
                                continue;
                        }
                        /* If it's named person, we'll dig the information from there.*/
                        if(xml.name() == "user") {
                              userList.append(parsePerson(xml));
                        }
                }
        }
        /* Error handling. */
        if(xml.hasError()) {
                QMessageBox::critical(this,
                                      "Xml_read::parseXML",
                                      xml.errorString(),
                                      QMessageBox::Ok);
        }
        xml.clear();
        // this->addPersonsToUI(persons);
}

UserInfo MainWindow::parsePerson(QXmlStreamReader xml) {
        UserInfo user;
        /* Let's check that we're really getting a person. */
        if(xml.tokenType() != QXmlStreamReader::StartElement &&
           xml.name() == "user") {
                return user;
        }
        /* Next element... */
        xml.readNext();
        /*
         * We're going to loop over the things because the order might change.
         * We'll continue the loop until we hit an EndElement named person.
         */
        while(!(xml.tokenType() == QXmlStreamReader::EndElement &&
                        xml.name() == "user")) {
                if(xml.tokenType() == QXmlStreamReader::StartElement) {
                        /* We've found first name. */
                        if(xml.name() == "name") {
                               // this->addElementDataToMap(xml, user);
                        }
                        /* We've found surname. */
                        if(xml.name() == "login") {
                              //  this->addElementDataToMap(xml, user);
                        }
                        /* We've found email. */
                        if(xml.name() == "pass") {
                             //   this->addElementDataToMap(xml, user);
                        }
                        /* We've found website. */
                        if(xml.name() == "salt") {
                             //   this->addElementDataToMap(xml, user);
                        }
                }
                /* ...and next... */
                xml.readNext();
        }
        return user;
}
Проблема возникает на этапе вызова функции userList.append(parsePerson(xml)).
Если нужен сам проект-выложу.
Записан
BRE
Гость
« Ответ #1 : Декабрь 11, 2011, 18:24 »

Код
C++ (Qt)
UserInfo MainWindow::parsePerson(QXmlStreamReader &xml) {
...
}
Записан
Gate007
Гость
« Ответ #2 : Декабрь 12, 2011, 18:54 »

Премного благодарен, все получилось Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.15 секунд. Запросов: 20.