Возникла следующая ошибка, хвосты которой я не могу найти второй день.
Выполняется сборка проекта 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)).
Если нужен сам проект-выложу.