C ++ QList继承自定义方法问题

时间:2010-09-04 12:54:40

标签: c++ inheritance qlist

我正在通过继承创建一个名为AccountList的自定义QList,名为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 个答案:

答案 0 :(得分:1)

foundAccount应该是一个指针。 帐户* foundAccount; 这应该会使你的一些错误消失。

答案 1 :(得分:1)

没有准备好Qt安装来测试它,但我相信你忘了派生类(AccountList)中的宏Q_OBJECT

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

另请参阅此问题:Qt question: Whad does the Q_OBJECT macro do?

答案 2 :(得分:0)

foreach不是一个有效的C ++构造,除了在C ++ 0x中,即使那样它也不会采用那种格式。使用整数循环或std :: for_each。另外,你真的,真的不应该有账号*,你应该使用某种形式的智能指针。最后,你声明了你的方法const,它使你继承的QList(为什么不只是将它作为一个成员变量?)const,这使得你想要返回const的Account *,但你试图只返回一个非const 。糟糕。

答案 3 :(得分:0)

尝试使用:

foreach ( Account* account, *this )
{
}