Container-Klassen in const-Methoden



  • Hallo,

    ich habe ein(en) problem/denkfehler bezüglich container klassen und zeigern in const methoden.

    Folgende ausgangssituation (code ist qt, sollte aber egal sein?):

    class MyTestClass : public QObject
    {
    	public:
    		MyTestClass(QObject *parent = 0);
    
    		QVariant getDataValue(int index) const;
    
    	private:
    		QHash<QString, MyDataContainer*> m_dataContainer;
    }
    
    QVariant MyTestClass::getDataValue(int index) const
    {
    	MyDataContainer *dataContainer = new MyDataContainer;
    	m_dataContainer.insert(QString::number(index), dataContainer);
    
    	return QVariant();
    }
    

    Bei

    m_dataContainer.insert(QString::number(index), dataContainer);
    

    bekomme ich folgenden fehlermeldung:

    error C2662: 'QHash<Key,T>::insert': this-Zeiger kann nicht von 'const QHash<Key,T>' in 'QHash<Key,T> &' konvertiert werden

    Kann mir jemand sagen, wo da mein fehler liegt?

    Danke!



  • getValue ist const. Das bedeutet, du darfst darin keine Membervariablen verändern.

    Wenn es unbedingt sein muss und du kein besseres Design findest, könntest du den Container als "mutable" deklarieren, dann darfst du ihn auch in const-Methoden ändern. Dies sollte aber vermieden werden, sofern möglich.



  • Dieses myDataContainer schaut nach einem Cache aus, in dem Fall wäre mutable ok.



  • Danke für die antworten, das leuchtet jetzt natürlich ein.


Anmelden zum Antworten