有人可以解释我的错误,我有这个课程:
class Account
{
private:
string strLastName;
string strFirstName;
int nID;
int nLines;
double lastBill;
public:
Account(string firstName, string lastName, int id);
friend string printAccount(string firstName, string lastName, int id, int lines, double lastBill);
}
但是当我打电话时:
string reportAccounts() const
{
string report(printAccountsHeader());
for(list<Account>::const_iterator i = listOfAccounts.begin(); i != listOfAccounts.end(); ++i)
{
report += printAccount(i->strFirstName, i->strLastName, i->nID, i->nLines, i->lastBill);;
}
return report;
}
我收到错误within context
,有人可以解释原因吗?
答案 0 :(得分:9)
我认为完整错误与“这些成员是私有within context
”和某些行号有关。
问题是i->strFirstName
从reportAccounts()
函数的角度来看是私有的。更好的解决方案可能是:
class Account{
private:
string strLastName;
string strFirstName;
int nID;
int nLines;
double lastBill;
public:
Account(string firstName, string lastName, int id);
string print() const
{
return printAccount(this->strLastName, this->strFirstName, this->nID,
this->nLines, this->lastBill);
}
};
然后
string reportAccounts() const {
string report(printAccountsHeader());
for(list<Account>::const_iterator i = listOfAccounts.begin(); i != listOfAccounts.end(); ++i){
report += i->print();
}
return report;
}
另一个选择是让printAccount
引用一个帐户(friend printAccount(const Account& account)
),然后它可以通过引用访问私有变量。
但是,该函数名为print Account 这一事实表明它可能更适合作为公共类函数。
答案 1 :(得分:1)
您声明函数printAccount
是class Account
的朋友。但是在该示例中,您正在访问函数i->strFirstName
中的类成员(reportAccounts
...)。后者未被宣布为朋友。
答案 2 :(得分:1)
您在类定义中缺少分号。
class Account{
private:
string strLastName;
string strFirstName;
int nID;
int nLines;
double lastBill;
public:
Account(string firstName, string lastName, int id);
friend string printAccount(string firstName, string lastName, int id, int lines, double lastBill);
};
^--- see the semicolon here?
答案 3 :(得分:0)
这不应该是整个错误..应该有更多的东西..
顺便说一下你的朋友语法是正确的,但在reportAccounts
中你似乎使用了Account
类的所有私有字段,如strFirstName
,函数的名称是reportAccounts
不是printAccounts
所以你可能只是做了一个方法朋友,但是你正试图用另一个访问私有字段。