Probleme mit dem Iterator bei QLIst

Alles rund um die Programmierung mit Qt
Antworten
Grieko
Beiträge: 17
Registriert: 12. Oktober 2016 08:50

Probleme mit dem Iterator bei QLIst

Beitrag 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 ?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Probleme mit dem Iterator bei QLIst

Beitrag 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.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten