Problem z QMapIterator

0

Hej.

Próbuje napisać pierwszą, prostą aplikacje w Qt. Problem w tym, że mam małe doświadczenie w pisaniu w C++ (do tej pory programowałem tylko w C#).

Oto fragment kodu z problemem:

Tutaj kod z .h

 
class AdressBook : public QWidget
{
    Q_OBJECT
    QMap<QString, QString> contacts;
    QMapIterator<QString, QString> iterator;
}

A tutaj z cpp:

AdressBook::AdressBook(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::AdressBook)
{
    ui->setupUi(this);
    iterator(contacts);
}
 

Chciałem po prostu wezwać konstruktor iteratora, aby mieć do niego dostęp wewnątrz całej klasy. Niestety z jakiegoś powodu dostaje błąd o treści:

 'QMapIterator<Key,T>' : no appropriate default constructor available
with
[
    Key=QString,
    T=QString
]

Jednak, gdy wywołam go w taki sposób:

 
AdressBook::AdressBook(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::AdressBook)
{
    ui->setupUi(this);
    QMapIterator<QString, QString> iterator(contacts);
}

To wszystko jest w porządku (po usunięciu go z klasy jako pole, tylko to nie rozwiązuje mojego problemu, bo potrzebuje szerszego dostępu do iteratora).

Czy byłby ktoś tak miły i wyjaśnił mi co robię źle i ewentualnie jak mogę obejść mój problem?

1

W Qt robi się to w taki sposób:

Tutaj kod z .h

class AdressBook : public QWidget
{
    Q_OBJECT
    QMap<QString, QString> contacts;
    QMapIterator<QString, QString> *iterator;
}

A tutaj z cpp:

AdressBook::AdressBook(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::AdressBook)
{
    ui->setupUi(this);
    iterator = new QMapIterator<QString,QString>(contacts);
}
1

W tym przypadku możesz obejść się bez wskaźnika inicjalizując iterator na liście inicjalizacyjnej konstruktora AdressBook.

0

Bardzo dziękuje.
Udało mi się kończyć aplikację. Teraz pozostało wymyślić następny mały projekt :).

1 użytkowników online, w tym zalogowanych: 0, gości: 1