Вызов функций-членов из QMap

У меня есть класс TypeData и я хочу хранить объекты этого типа в QMap, тогда я хочу получить определенный объект из карты и вызвать функцию-член этого объекта. Но когда я пытаюсь это сделать, я получаю следующее сообщение об ошибке:

error C2662: 'TypeData::write': cannot convert 'this' pointer from 'const TypeData' to 'TypeData &'

вот соответствующие фрагменты кода:

QMap<QString, TypeData> typeDataList;

typeDataList.insert(currentID, temp);

typeDataList.value(currentID).write();

Кто-нибудь может сказать, что я здесь делаю неправильно? И как я мог это исправить?


person samoncode    schedule 21.11.2012    source источник


Ответы (1)


QMap::value возвращает const T, то есть как копию элемента на карте, так и неизменяемую. Ваш метод write(), вероятно, не является константным, поэтому вызов write() для const T не разрешен. Если бы значение возвращало только T, оно работало бы, но любые изменения, которые write() вносит во временный объект, были бы немедленно потеряны. (Поскольку копия уничтожается сразу после этого).

Таким образом, вы можете сделать запись() константной, если она не изменяет TypeData. Это предпочтительнее, если это возможно.

В качестве альтернативы вы можете сделать:

typeDataList[currentID].write() // modifies the object in the map but also will insert a TypeData() if there is no entry for key currentID yet.

или, более подробно, но без вставки нового элемента, если он не найден:

QMap<QString,TypeData>::Iterator it = typeDataList.find(currentID);
if ( it != typeDataList.constEnd() ) {
    it->write();
} else {
    // no typedata found for currentID
}
person Frank Osterfeld    schedule 21.11.2012