【问题标题】:C++ QList inheritance custom method problemC++ QList继承自定义方法问题
【发布时间】:2011-04-08 05:27:44
【问题描述】:

我正在通过继承创建一个名为 AccountList 的 Account* 类型的自定义 QList。

我的 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 编译器在编译时给了我各种奇怪的错误。

任何帮助将不胜感激。

【问题讨论】:

    标签: c++ inheritance qlist


    【解决方案1】:

    试试这个:

    foreach ( Account* account, *this )
    {
    }
    

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

        foundAccount 应该是一个指针。 账户 *foundAccount; 这应该可以消除您的一些错误。

        【讨论】:

          【解决方案4】:

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

          【讨论】:

          • 在 QT C++ 框架中,foreach 是一个有效的构造。我什至在不使用 foreach 的情况下尝试了这个,而是选择了迭代器,但同样的区别。 QList 是 Account* 指针列表的唯一原因是因为这就是我的作业所要求的。我真正需要知道的是如何遍历这个列表,以便我可以根据帐号从列表中返回 Account 对象。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-09-21
          • 2012-05-11
          • 2011-09-01
          • 1970-01-01
          相关资源
          最近更新 更多