Проблема с настраиваемым методом наследования C ++ QList

Я создаю настраиваемый QList типа Account * с именем AccountList посредством наследования.

Мое объявление интерфейса для AccountList выглядит следующим образом:

class Client
{
    public:
        Client(QString firstName, QString lastName, QString address1, QString address2, QString postalCode);
        QString toString();

    private:
        QString m_FirstName;
        QString m_LastName;
        QString m_Address1;
        QString m_Address2;
        QString m_PostalCode;
};

class Account
{
    public:
        Account(unsigned acctNum, double balance, const Client owner);
        unsigned getAcctNum();
        double getBalance();
        Client getOwner();
        virtual ~Account();

    private:
        unsigned m_AcctNum;
        double m_Balance;
        Client m_Owner;
};

class AccountList : public QList<Account*>
{
    public:
        QString toString() const;
        Account* findAccount(unsigned accNum) const;
        bool addAccount(const Account* acc) const;
        bool removeAccount(unsigned accNum) const;
};

У меня проблема с реализацией AccountList, например метод findAccount.

Account* AccountList::findAccount(unsigned accNum) const
{
    Account foundAccount;
    foreach(Account* acc, this)
    {
        if (acc->getAcctNum() == accNum)
        {
            foundAccount = acc;
            break;
        }
    }
    return foundAccount;
}

Надеюсь, что описанный выше метод даст вам представление о том, чего я пытаюсь достичь. Кажется довольно простым и прямолинейным, но я не могу заставить его работать. Компилятор Qt Creator выдает разные странные ошибки при компиляции.

Любая помощь будет оценена по достоинству.


person Sameer Shariff    schedule 04.09.2010    source источник


Ответы (4)


foundAccount должен быть указателем. Аккаунт * foundAccount; Это должно устранить некоторые из ваших ошибок.

person Ganesh    schedule 04.09.2010

У вас нет готовой установки Qt для тестирования, но я уверен, что вы забыли макрос Q_OBJECT внутри своего производного класса (AccountList):

class myClass : public SomeQtClass
{
    Q_OBJECT
    public:
    // ...
}

См. Также этот вопрос: Вопрос Qt: что делает макрос Q_OBJECT?

person Mario    schedule 09.12.2010

foreach не является допустимой конструкцией C ++, за исключением C ++ 0x, и даже в этом случае он не принимает этот формат. Используйте интегральный цикл или std :: for_each. Кроме того, вам действительно, действительно, не нужно иметь учетную запись *, вы должны использовать какую-то форму умного указателя. Наконец, вы объявили свой метод const, который делает QList, от которого вы унаследовали (почему бы просто не использовать его как переменную-член?), Const, что делает Account *, который вы хотите вернуть, const, но вы пытались просто вернуть неконстантный . Ой.

person Puppy    schedule 04.09.2010
comment
В структуре QT C ++ foreach является допустимой конструкцией. Я даже пробовал это без использования foreach и вместо этого выбрал итераторы, но с той же разницей. Единственная причина, по которой QList является списком указателей Account *, состоит в том, что это то, что требовалось моим назначением. Что мне действительно нужно знать, так это как выполнить итерацию по этому списку, чтобы я мог вернуть объект Account из списка на основе номера учетной записи. - person Sameer Shariff; 04.09.2010

Попробуйте использовать это:

foreach ( Account* account, *this )
{
}
person Zeke    schedule 09.12.2010