2016-06-12 70 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的迭代器。一个迭代器,一个指向当前列表元素的指针。使用' - >'运算符可以解引用它,并在当前元素上应用一个函数。 –