Seite 1 von 1

QMap zum Aufbewahren von Klasseninstanzen?

Verfasst: 13. Juni 2006 12:07
von mikro
Hi,
ich möchte mir div. Klasseninstanzen einer Klasse namens cKatalogAttribut merken. dazu habe ich der Klasse die darauf zugreifen soll, eine QMap hinzugefügt:

Code: Alles auswählen

private:
    QMap<QString,cKatalogAttribut> alleEigenschaften;
irgendwann werden dann aus der Datenbank alle Attribute gesucht und diese Map gefüllt:

Code: Alles auswählen

cKatalogAttribut attr(shortText,longText,einheitID,sTyp);
alleEigenschaften.insert(shortText,attr);
später will ich dann auf eine Eigenschaft einer dieser Instanzen zugreifen:

Code: Alles auswählen

leLongText->setText(alleEigenschaften.value(text).getLongText());
getLongText() ist eine Methode von cKatalogAttribut die ein QString zurückgibt, das in den QLineEdit leLongText geschrieben werden soll.
Ich habe ausdrücklich die Instanzen selbst und nicht Pointer darauf gespeichert, da ich sonst die Instanz ja noch woanders speichern müsste.
obiger Code führt aber zur Fehlermeldung:
Makefile.Debug:311: warning: overriding commands for target `build\.rcc\qrc_WERTer.cpp'
Makefile.Debug:262: warning: ignoring old commands for target `build\.rcc\qrc_WERTer.cpp'
ui\ConfigWindow.cpp:117: error: passing `const cKatalogAttribut' as `this' argument of `QString cKatalogAttribut::getLongText()' discards qualifiers
ui\ConfigWindow.cpp:118: error: passing `const cKatalogAttribut' as `this' argument of `int cKatalogAttribut::getEinheitID()' discards qualifiers
ui\ConfigWindow.cpp:119: error: passing `const cKatalogAttribut' as `this' argument of `int cKatalogAttribut::getTypeID()' discards qualifiers
ui\ConfigWindow.cpp:117: instantiated from here
C:\Qt\4.1.3\include\QtCore\..\..\src\corelib\tools\qmap.h:396: error: no matching function for call to `cKatalogAttribut::cKatalogAttribut()'
src\katalogattribut.h:7: note: candidates are: cKatalogAttribut::cKatalogAttribut(const cKatalogAttribut&)
src\katalogattribut.h:9: note: cKatalogAttribut::cKatalogAttribut(QString, QString, int, QString)
wie macht man sowas sonst?

Verfasst: 13. Juni 2006 15:42
von upsala
das hast ein Problem mit 'const'. Wahrscheinlich ist deine Funktion in der du getLongText() aufrufst als const deklariert, getLongText() aber nicht

Verfasst: 13. Juni 2006 15:56
von mikro
ja. QMap::value() ist so definiert:

Code: Alles auswählen

const T value ( const Key & key ) const
da kommt das const her. Wie kann ich das umgehen?