Проблема пользовательского метода наследования C ++ QList - PullRequest
1 голос
/ 04 сентября 2010

Я создаю собственный 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 выдает мне всевозможные странные ошибки при компиляции.

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

Ответы [ 4 ]

1 голос
/ 10 декабря 2010

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

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

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

1 голос
/ 04 сентября 2010

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

0 голосов
/ 10 декабря 2010

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

foreach ( Account* account, *this )
{
}
0 голосов
/ 04 сентября 2010

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

...