2010-09-04 60 views
1

我正在通過繼承創建一個類型爲Account *的AccountList的自定義QList。C++ 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編譯器在編譯時給了我各種奇怪的錯誤。

任何幫助,將不勝感激。

回答

0

foreach不是一個有效的C++構造,除了在C++ 0x中,即使它不採用這種格式。使用積分循環或std :: for_each。另外,你真的,真的不應該有一個Account *,你應該使用某種形式的智能指針。最後,你聲明瞭你的方法const,它使得你繼承的QList(爲什麼不把它作爲一個成員變量?)const,它使得Account *你想返回const - 但是你試圖只返回一個非const 。哎呦。

+1

在QT C++框架中,foreach是一個有效的構造。我甚至在不使用foreach的情況下嘗試了這種方法,而是選擇了迭代器,但同樣的區別。 QList是Account *指針列表的唯一原因是因爲這就是我的任務所要求的。 我真的需要知道的是如何遍歷此列表,以便我可以基於賬號從列表中返回Account對象。 – 2010-09-04 13:22:50

1

foundAccount應該是一個指針。 Account * foundAccount; 這應該會讓你的一些錯誤消失。

0

嘗試使用這樣的:

foreach (Account* account, *this) 
{ 
} 
1

不要有Qt的安裝準備測試,但我寧願相信你忘了你的派生類中宏Q_OBJECT(爲accountList):

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

另請參閱這個問題:Qt question: Whad does the Q_OBJECT macro do?