Использование QMap и получение сообщений об ошибках компиляции - PullRequest
0 голосов
/ 19 марта 2020

Я пытаюсь использовать "QMap" в прототипе класса:

    QMap<QString, TargetsInfo*> m_targets;

В методе доступа у меня есть:

    TargetsInfo* TargetsModel::addTarget(int division, int camera, int map) const {
        TargetsInfo* target = getTarget(division, camera, map);

        if (target == nullptr) {
            const QString key = makeKey(division, camera, map);
            target = new TargetsInfo();

            if ( target != nullptr ) {
                m_targets.insert(key, target);
            }
        }
        return target;
    }

    TargetsInfo* TargetsModel::getTarget(int division, int camera, int map) const {
        const QString key = makeKey(division, camera, map);
        QMap<QString, TargetsInfo*>::iterator itr = m_targets.find(key);
        return (its == m_targets.end()) ? nullptr : itr.value();
    }

При компиляции я получаю следующее ошибки, которые я пытаюсь понять, что не так:

    C2663: 'QMap<QString, TargetInfo *>::insert': 2 overloads have no legal conversion for 'this' pointer
    C2440: 'initialising': cannot convert from 'QMap<QString, TargetInfo *>::const_iterator' to 'QMap::<QString, TargetInfo *>::iterator'
    No constructor could take the source type, or constructor overload resolution was ambiguous

1 Ответ

0 голосов
/ 19 марта 2020

Для второй ошибки измените

QMap<QString, TargetsInfo*>::iterator itr = ...

на

QMap<QString, TargetsInfo*>::const_iterator itr = ...

Ваш getTarget метод является константным, поэтому m_targets.find возвращает константный итератор (в противном случае вы можете изменить m_targets внутри вашего предположительно константного метода).

Для первой ошибки удалите const из вашего addTarget метода. Очевидно, что метод, который добавляет элементы к m_targets, не должен быть постоянным.

...