1

継承によって 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;
};

findAccount メソッドなどの AccountList の実装に問題があります。

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

上記の方法で、私が達成しようとしていることのアイデアが得られることを願っています。かなり単純で簡単に思えますが、うまくいきません。Qt Creator コンパイラは、コンパイル時にあらゆる種類の奇妙なエラーを表示します。

どんな助けでも大歓迎です。

4

4 に答える 4

1

Qt をテストする準備ができていませんが、Q_OBJECT派生クラス (AccountList) 内のマクロを忘れていることは間違いありません。

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

この質問も参照してください: Qt question: Q_OBJECT マクロは何をしますか?

于 2010-12-09T23:04:28.983 に答える
1

foundAccount はポインタでなければなりません。アカウント *foundAccount; これにより、エラーの一部が解消されるはずです。

于 2010-09-04T13:35:17.390 に答える
0

foreach は、C++0x を除いて有効な C++ 構造ではなく、その場合でもその形式を取りません。整数ループまたは std::for_each を使用します。さらに、アカウント* を持つべきではなく、なんらかの形式のスマート ポインターを使用する必要があります。最後に、メソッド const を宣言しました。これにより、継承した QList が作成されます (メンバー変数として持たないのはなぜですか?) . おっと。

于 2010-09-04T13:01:17.530 に答える
0

これを使用してみてください:

foreach ( Account* account, *this )
{
}
于 2010-12-09T22:34:17.330 に答える