QMap zum Aufbewahren von Klasseninstanzen?

Alles rund um die Programmierung mit Qt
Antworten
mikro
Beiträge: 60
Registriert: 19. April 2006 09:23
Wohnort: Erlangen
Kontaktdaten:

QMap zum Aufbewahren von Klasseninstanzen?

Beitrag 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?
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

das hast ein Problem mit 'const'. Wahrscheinlich ist deine Funktion in der du getLongText() aufrufst als const deklariert, getLongText() aber nicht
mikro
Beiträge: 60
Registriert: 19. April 2006 09:23
Wohnort: Erlangen
Kontaktdaten:

Beitrag 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?
Antworten