Seite 1 von 1

Probleme mit dem Iterator bei QLIst

Verfasst: 17. Oktober 2017 20:45
von Grieko
Hallo,
ich habe eine Klasse die Angaben zu einem Event enthält (Id, Datum,...) namens KMEvent. Da ich mit einer Liste von mehreren Events arbeiten muss, habe ich eine zweite Klasse namens "Eventlist" erstellt. Hier gibt es folgende Definition:

Code: Alles auswählen

"private:
    QList<KMEvent> m_Eventlist;"
Dies soll meine Liste sein, so weit so gut.
Nun möchte ich diese Liste duchwandern, habe also folgenden Code:

Code: Alles auswählen

int Eventlist::GetMaxID()
{
    int n = -1;

    QList<KMEvent>::const_iterator i;
    KMEvent e;

    if (m_Eventlist.isEmpty())
    {
        n = 0;
    } else {
        for (i = m_Eventlist.begin(); i != m_Eventlist.end(); i++)
        {
            if (i->m_nId > n)
                n = i->m_nId;
        }
    }
    return n;
}
Der Compiler meckert aber die Zeile mit der for-Schleife an:
C:\Users\Conner\Dropbox\Qt\Eventuhr\Eventuhr\eventlist.cpp:52: Fehler: no match for 'operator=' (operand types are 'QList<KMEvent>::const_iterator' and 'KMEvent')
for (i = m_Eventlist.first();i != m_Eventlist.last();i++)
^

C:\Users\Conner\Dropbox\Qt\Eventuhr\Eventuhr\eventlist.cpp:52: Fehler: no match for 'operator!=' (operand types are 'QList<KMEvent>::const_iterator' and 'KMEvent')
for (i = m_Eventlist.first();i != m_Eventlist.last();i++)
^

Woran liegts ?

Re: Probleme mit dem Iterator bei QLIst

Verfasst: 18. Oktober 2017 17:16
von Christian81
Der Code und die Fehlermeldung passen absolut nicht zusammen...
for (i = m_Eventlist.begin(); i != m_Eventlist.end(); i++)
..
for (i = m_Eventlist.first();i != m_Eventlist.last();i++)
abgesehen davon würde ich dem Code etwas weniger C-Style guttun:

Code: Alles auswählen

int GetMaxID()
{
    if (m_Eventlist.isEmpty())
        return 0;

    int n = 0;
    // c++03
    //for (QList<KMEvent>::const_iterator i = m_Eventlist.begin(); i != m_Eventlist.end(); i++)
    //{
    //    const KMEvent &ev = *i;
    // c++11
    for (const auto &ev : m_Eventlist)
    {
        if (ev.m_nId > n)
            n = ev.m_nId;
    }
    return n;
}
Und ich glaube nicht dass Du eine QList<> möchtest, eher einen QVector<> oder ggf. sogar eine Q(Multi)Map mit id oder Zeitstempel als Key.