2016-06-12 35 views
-1

因此BCD是另一個類BankCustomerDetails的對象列表。 BCD也是班級系統的一個數據成員。
比方說,我想從列表中訪問第二個客戶的名稱,如下所示: -
BCD [1] .Name
但是,這不起作用。訪問列表中的對象的數據成員

class BankSystem 
    { 
    private: 
     std::list<BankCustomerDetails>BCD; 

    public: 
     std::list<BankCustomerDetails> GetBankCustomerDetails(); 
     void SetBankCustomerDetails(std::list<BankCustomerDetails>&); 
     int GetTotalCustomerCount(); 
     void Create_AddCustomerAccount_BankSystem(BankCustomerDetails&); 

     bool SearchCustomerDetails_byName(std::string); 
     bool SearchCustomerDetails_byAccountNumber(unsigned long int); 

     void UpdateCustomerDetails_byAccountNumber(std::string ,unsigned long int); 

     void DepositMoney_byAccountNumber(unsigned long int ,double); 

     void WithdrawMoney_byAccountNumber(unsigned long int , double); 

     double BalanceInquiryofCustomer_byAccountNumber(unsigned long int); 

     void DeleteCustomerDetails_byAccountNumber(unsigned long int); 

     void DisplayAllCustomerDetails(); 

    }; 



    class BankCustomerDetails 
    { 
    private: 
     std::string Name; 
     unsigned long int Account_Number; 
     double Account_Balance; 
    public: 

     BankCustomerDetails(); 
     BankCustomerDetails(std::string, unsigned long in, double); 

     std::string GetBankCustomerName(); 
     unsigned long int GetBankCustomerAccount_Number(); 
     double GetBankCustomerAccount_Balance(); 

     void SetBankCustomerName(std::string&); 
     void SetBankCustomerAccount_Number(unsigned long int&); 
     void SetBankCustomerAccount_Balance(double&); 

     void AcceptBankCustomerDetails(); 
     void DisplayBankCustomerDetails(); 
    }; 

,這是我想要做什麼: -
在Client.cpp

string nm; 
BankSystem BS; 
cout<<"Enter The Customer Name to Search Details"<<endl; 
cin>>nm; 
int flag = BS.SearchCustomerDetails_byName(nm); 

在BankSystem.cpp

bool BankSystem::SearchCustomerDetails_byName(std::string name) 
{ 
    //Need to Implement 
    for(int i = 0; i < BCD.size(); i++){ 
     if(BCDName = name) 
      return true; 
    } 
return false; 
} 
+0

我無法編輯頭文件。我只被允許執行這些功能。 我想用迭代器來實現這個。 –

+0

不要濫用標籤 –

+0

嗯謝謝你指點,但爲什麼問題不值得C++ faq和C++ 11標籤。 –

回答

0

你不能用一個索引來訪問std::list元素方括號。我建議使用std::vector而不是std::list。然後,你可以這樣寫:

for (int i = 0; i < BCD.size(); i++) { 
    if (BCD[i].GetBankCustomerName() == name) { 
     return true; 
    } 
} 

當然,你也可以做同樣的事情用list但你必須使用迭代器重寫循環。

std::list<BankCustomerDetails>::iterator iterator; 
for (iterator = intList.begin(); iterator != intList.end(); ++iterator) 
    if (iterator->GetBankCustomerName() == name) { 
     return true; 
    } 
} 

我還是推薦使用vector,因爲它幾乎總是有更好的表現。

另外兩個注意事項:

  • 列表itemBCD[i].Name不起作用,因爲Name是專用的。
  • 比較運算符是==而不是=
+0

謝謝弗蘭克的回覆。但我無法更改頭文件。這將是很好,我可以用迭代器訪問元素。你能解釋一下嗎? –

+0

我得到這個錯誤 無法將'this'指針從'const BankCustomerDetails'轉換爲'BankCustomerDetails&' 正是iterator-> GetBankCustomerName()表示 –

+0

@Mukul:然後從迭代器聲明中刪除'const_'。實際上Getter函數,比如'GetBankCustomerName'應該是'const',因爲它們不會修改對象,但在你的情況下,它不是。既然你不能編輯標題,你必須使用一個非const的迭代器。一個迭代器,一個指向當前列表元素的指針。使用' - >'運算符可以解引用它,並在當前元素上應用一個函數。 –