Datenübertragung zwischen Klassen mit QList

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
jw202
Beiträge: 36
Registriert: 6. August 2012 22:25

Datenübertragung zwischen Klassen mit QList

Beitrag von jw202 »

Hallo,

ich habe in meiner Anwendung zwei Klassen (pdfRenderer und DatabaseManager), zwischen denen Datensätze übertragen werden müssen. DatabaseManager soll eine Methode zur Verfügung stellen, die alle Teilnehmer aus einer der besagten Datenbank ausliest und deren Attribute als QList zur Verfügung stellt. Zu diesem Zweck habe ich ein teilnehmerObject erstellt, wo alle relevanten Attribute für Teilnehmer enthalten sind.


Es folgt eine Methode, die alle Einträge einer Datenbank ausliest und die Attribute in ein Objekt verpackt.

Code: Alles auswählen

QList <teilnehmerObject> DatabaseManager::getAllTeilnehmer()
{
    QList <teilnehmerObject> liste;

    this->openDB();
    if (db.isOpen())
    {
        QSqlQuery query(QString("select * from teilnehmer"));
        while (query.next())
            {
            liste.append( new teilnehmerObject(query.value(0).toString(), query.value(1).toString(),query.value(2).toString(),query.value(3).toString(),query.value(4).toInt(),query.value(5).toInt(),query.value(6).toInt(),query.value(7).toInt(),query.value(8).toInt(),query.value(9).toInt()));
            }

    }
    this->closeDB();

    return liste;
}


jetzt kommen so nichtssagende Fehlermeldungen wie
/home/johannes/qt/OebkVerwaltung-build-desktop-Qt_4_8_1_in_Pfad__System__Release/../OebkVerwaltung/databasemanager.cpp:-1: In member function 'QList<teilnehmerObject> DatabaseManager::getAllTeilnehmer()':
/home/johannes/qt/OebkVerwaltung-build-desktop-Qt_4_8_1_in_Pfad__System__Release/../OebkVerwaltung/databasemanager.cpp:168: Fehler:no matching function for call to 'QList<teilnehmerObject>::append(teilnehmerObject*)'
/home/johannes/qt/OebkVerwaltung-build-desktop-Qt_4_8_1_in_Pfad__System__Release/../OebkVerwaltung/databasemanager.cpp:168: candidates are:
/usr/include/qt4/QtCore/qlist.h:507: void QList<T>::append(const T&) [with T = teilnehmerObject]
/usr/include/qt4/QtCore/qlist.h:507: note: no known conversion for argument 1 from 'teilnehmerObject*' to 'const teilnehmerObject&'
/usr/include/qt4/QtCore/qlist.h:841: void QList<T>::append(const QList<T>&) [with T = teilnehmerObject]
/usr/include/qt4/QtCore/qlist.h:841: note: no known conversion for argument 1 from 'teilnehmerObject*' to 'const QList<teilnehmerObject>&'
/home/johannes/qt/OebkVerwaltung-build-desktop-Qt_4_8_1_in_Pfad__System__Release/../OebkVerwaltung/databasemanager.h:15: In file included from ../OebkVerwaltung/databasemanager.h:15:0,
/home/johannes/qt/OebkVerwaltung-build-desktop-Qt_4_8_1_in_Pfad__System__Release/../OebkVerwaltung/databasemanager.cpp:2: from ../OebkVerwaltung/databasemanager.cpp:2:
/usr/include/qt4/QtCore/qobject.h:-1: In copy constructor 'teilnehmerObject::teilnehmerObject(const teilnehmerObject&)':
/home/johannes/qt/OebkVerwaltung-build-desktop-Qt_4_8_1_in_Pfad__System__Release/../OebkVerwaltung/teilnehmerobject.h:6: instantiated from 'void QList<T>::node_copy(QList<T>::Node*, QList<T>::Node*, QList<T>::Node*) [with T = teilnehmerObject]'/usr/include/qt4/QtCore/qlist.h:711: instantiated from 'void QList<T>::detach_helper(int) [with T = teilnehmerObject]'
/usr/include/qt4/QtCore/qlist.h:725: instantiated from 'void QList<T>::detach_helper() [with T = teilnehmerObject]'
/usr/include/qt4/QtCore/qlist.h:122: instantiated from 'QList<T>::QList(const QList<T>&) [with T = teilnehmerObject]'
/home/johannes/qt/OebkVerwaltung-build-desktop-Qt_4_8_1_in_Pfad__System__Release/../OebkVerwaltung/databasemanager.cpp:174: instantiated from here

/usr/include/qt4/QtCore/qobject.h:333: Fehler:'QObject::QObject(const QObject&)' is private
/home/johannes/qt/OebkVerwaltung-build-desktop-Qt_4_8_1_in_Pfad__System__Release/../OebkVerwaltung/teilnehmerobject.h:6: Fehler:within this context
/home/johannes/qt/OebkVerwaltung-build-desktop-Qt_4_8_1_in_Pfad__System__Release/../OebkVerwaltung/databasemanager.cpp:1: from ../OebkVerwaltung/databasemanager.cpp:1:
/usr/include/qt4/QtCore/qlist.h:-1: In member function 'void QList<T>::node_copy(QList<T>::Node*, QList<T>::Node*, QList<T>::Node*) [with T = teilnehmerObject]':
ich versteh das grundsätzlich nicht. Kann die Fehler nicht nachvollziehen, da ich mich 1:1 an das Tutorial gehalten habe.


PS.: hier ist ein analoges Beispiel mit "Employees" http://www.mathematik.uni-ulm.de/help/q ... qlist.html
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Datenübertragung zwischen Klassen mit QList

Beitrag von Christian81 »

Die Fehlermeldung ist genau richtig - die QList speichert Objekte aber Du versucht einen Pointer auf ein Objekt in die QList einzutragen --> C++ Grundlagen
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
jw202
Beiträge: 36
Registriert: 6. August 2012 22:25

Re: Datenübertragung zwischen Klassen mit QList

Beitrag von jw202 »

aha ok, ich habs glaub ich verstanden

habe das Problem so gelöst, dass ich die Zeile

Code: Alles auswählen

    QList <teilnehmerObject> liste;
in

Code: Alles auswählen

    QList <teilnehmerObjec*t> liste;
geändert habe. Jetzt werden in der QList nur noch Zeiger gespeichert und es funktioniert auch. Gibt es noch einen besseren (effizienteren/sichereren) Weg wie man das machen kann. Btw wie schauts eigentlich mit der Freigabe vom Speicher aus?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Datenübertragung zwischen Klassen mit QList

Beitrag von Christian81 »

Du legst den Speicher an also musst Du dich auch ums Löschen kümmern.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten