2016-06-12 7 views
-1

Also BCD ist eine Liste der Objekte einer anderen Klasse BankCustomerDetails. BCD ist auch ein Datenelement eines Klassenbanksystems.
Sagen wir, ich möchte auf den Namen des zweiten Kunden aus der Liste zugreifen, etwa so: -
BCD [1] .Name
Aber das funktioniert nicht.Zugreifen auf Datenelemente eines Objekts aus einer Liste

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(); 
    }; 

Und dieses ist, was ich tun möchte: -
Bei Client.cpp

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

Bei 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

Ich kann die Header-Dateien nicht bearbeiten. Ich darf nur die Funktionen implementieren. Ich möchte dies mit Iterator implementieren. –

+0

Tags nicht missbrauchen –

+0

Nun, danke für das Zeigen, aber warum die Probleme nicht die C++ faq und C++ 11 Tags verdienen. –

Antwort

0

Sie können std::list Elemente nicht mit einem Index zugreifen und eckige Klammern. Ich empfehle die Verwendung einer std::vector anstelle einer std::list. Dann können Sie schreiben:

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

Natürlich können Sie auch die gleiche Sache mit einem list tun könnte, aber dann müssen Sie die Schleife umschreiben einen Iterator verwenden.

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

Noch empfehle ich die vector verwenden, weil es fast immer eine bessere Leistung hat.

Zwei weitere Hinweise:

  • Liste itemBCD[i].Name funktioniert nicht, weil Name privat ist. Der Vergleichsoperator ist == und nicht =.
+0

Danke Frank für die Antwort. Aber ich kann die Headerdateien nicht ändern. Es wäre gut, wenn ich mit Iterator auf die Elemente zugreifen könnte. Kannst du es bitte erklären? –

+0

Ich erhalte diesen Fehler kann ‚diesen‘ Zeiger von ‚const BankCustomerDetails‘ auf ‚BankCustomerDetails &‘ nicht konvertieren Und genau iterator-> GetBankCustomerName() bedeutet –

+0

@Mukul: Dann die 'const_' aus der Iterator Erklärung entfernen. Getterfunktionen wie 'GetBankCustomerName' sollten eigentlich' const' sein, weil sie das Objekt nicht verändern, in Ihrem Fall jedoch nicht. Da Sie die Kopfzeile nicht bearbeiten können, müssen Sie einen nichtkonstanten Iterator verwenden. Ein Iterator ist ein Zeiger auf das aktuelle Listenelement. Mit dem Operator '->' deserferen Sie es und wenden eine Funktion auf das aktuelle Element an. –

Verwandte Themen