Вызов функций-членов из 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();

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

2

Решение

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

Таким образом, вы можете сделать write () const, если он не изменяет 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
}
3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector