【发布时间】:2017-06-28 17:59:04
【问题描述】:
我正在制作一个程序,其中我将类对象存储在一个向量中,并将这个向量作为 const 向量作为参考变量传递给一个友元函数,并使用 const_vector 对其进行迭代,我正在尝试调用类对象的成员函数使用 const_iterator 所以,我收到错误。但是当我在没有 const vector 的情况下执行此操作并在没有 const_iterator 的情况下对其进行迭代时,我的程序运行成功。是我们无法迭代 const_vector 还是无法使用 const_vector 访问成员变量或函数。
vector<AccountHolder>::iterator searchAccount(const vector<AccountHolder>& v,long int accno)
{
vector<AccountHolder>::const_iterator itr;
for(itr = v.begin();itr!=v.end();itr++)
{
if(itr->getAccNo() == accno)return itr;
}
return v.end();
}
这是整个代码。
#include<iostream>
#include<vector>
using namespace std;
class Account{
private:
long int AccNo;
char AccType;
public:
long int getAccNo()
{
return AccNo;
}
char getAccType()
{
return AccType;
}
void setAccNo(long int accno)
{
AccNo = accno;
}
void setAccType(char acctype)
{
AccType = acctype;
}
};
class AccountHolder:public Account{
private:
string Name;
public:
string getAccHolderName()
{
return Name;
}
void setAccHolderInfo(long int accno,char acctype,string name)
{
setAccNo(accno);
setAccType(acctype);
Name = name;
}
void displayAccountHolderInfo()
{
cout << "Name : " << getAccHolderName() << endl;
cout << "Account Number : " << getAccNo() << endl;
cout << "Account Type : " << getAccType() << endl;
}
friend void displayAllAccountHolder(vector<AccountHolder> &v);
friend vector<AccountHolder>::iterator searchAccount(vector<AccountHolder> &v,long int accno);
//friend bool searchAccount(const vector<AccountHolder> &v,long int accno,char acctype);
//friend vector<AccountHolder>::iterator searchAccount(const vector<AccountHolder> &v,long int accno=0,string name);
};
void displayAllAccountHolder(vector<AccountHolder> &v)
{
for(vector<AccountHolder>::iterator itr = v.begin();itr != v.end() ; itr++)
itr->displayAccountHolderInfo();
}
vector<AccountHolder>::iterator searchAccount(const vector<AccountHolder>& v,long int accno)
{
vector<AccountHolder>::const_iterator itr;
for(itr = v.begin();itr!=v.end();itr++)
{
if(itr->getAccNo() == accno)return itr;
}
return v.end();
}
int main()
{
vector<AccountHolder> Acc;
vector<AccountHolder> SavingAcc;
vector<AccountHolder> CurrentAcc;
vector<AccountHolder>::iterator temp;
AccountHolder AccH;
long int accno;
char acctype;
string name;
do{
cout << "Select Your Choice : " << endl;
cout << "1. Insert Data " << endl;
cout << "2. Display Data " << endl;
cout << "3. Display All User Data " << endl;
cout << "4. Exit " << endl;
cout << " Enter Your Choice : ";
int choice;
cin >> choice;
switch(choice)
{
case 1: cout << "\nEnter Name : ";
cin.get();
getline(cin >> ws,name);
accNo:
cout << "\nEnter Account Number : ";
cin >> accno;
if(searchAccount(Acc,accno)!=Acc.end())
{
cout << "\nAccount Number already exist." << endl;
goto accNo;
}
accType:
cout << "\nEnter Account Type : ";
cin >> acctype;
if(acctype == 's' || acctype =='S')
{
AccH.setAccHolderInfo(accno,'S',name);
SavingAcc.push_back(AccH);
Acc.push_back(AccH);
}
else if(acctype == 'c' || acctype == 'C')
{
AccH.setAccHolderInfo(accno,'C',name);
CurrentAcc.push_back(AccH);
Acc.push_back(AccH);
}
else
{
cout << "\n Invalid Account Type" << endl;
goto accType;
}
break;
case 2: cout << "\nEnter Account Number : ";
cin >> accno;
cout << "\nEnter Account Type(or just type 'n') : ";
cin.get();
cin >> acctype;
if(acctype == 's' || acctype == 'S')
temp = searchAccount(SavingAcc,accno);
else if(acctype == 'c' || acctype == 'C')
temp = searchAccount(CurrentAcc,accno);
else
temp = searchAccount(Acc,accno);
if(temp!=SavingAcc.end() && temp!=CurrentAcc.end() && temp!=Acc.end() )
temp->displayAccountHolderInfo();
else
cout << "\n Account does not exist. " << endl;
break;
case 3:displayAllAccountHolder(Acc);
break;
case 4: return 0;
break;
default:
break;
}
}while(true);
return 0;
}
但是当你删除 const vector 到 vector 时它会起作用。
vector::iterator searchAccount(const vector& v,long int accno)
【问题讨论】:
-
成员函数是否标记为
const? -
请提供代码示例(不是代码描述),并复制粘贴错误消息(它应该解释您的代码的问题)。
-
正如其他人所说,除非您向我们提供您的代码,否则我们无法为您提供帮助。请编辑您的帖子以包含您的代码,我们将从那里开始。
-
vector
::iterator searchAccount(const vector & v,long int accno) { vector ::const_iterator itr; for(itr = v.begin();itr!=v.end();itr++) { if(itr->getAccNo() == accno)return itr; } 返回 v.end(); } -
请放在原帖中。粘贴,全选,然后按 Ctrl + K 格式化。