我正在尝试将运算符“<<”重载为友元函数,但由于某种原因它无法访问该类的成员。为什么朋友功能不能访问 isEmpty(),计数和 call_DB [] ? 这是我写的代码:
#include <iostream>
#include <string>
using namespace std;
class callRecord
{
public:
string firstname;
string lastname;
string cell_number;
int relays;
int call_length;
double net_cost;
double tax_rate;
double call_tax;
double total_cost;
};
class callClass
{
public:
bool isEmpty();
friend ostream & operator<<(ostream & out, callClass &Org);
private:
int count;
int size;
callRecord *call_DB;
};
bool callClass::isEmpty()
{
if (count == 0)
{
return 1;
}
else
{
return 0;
}
}
ostream & operator<<(ostream & out, callClass &Org)
{
if (isEmpty() == 1)
{
cout << "The array is empty" << endl;
}
else
{
out.setf(ios::showpoint);
out.setf(ios::fixed);
out.precision(2);
for (int i = 0; i < count; i++)
{
out << setw(10) << call_DB[i].firstname << " ";
out << setw(10) << call_DB[i].lastname << " ";
out << call_DB[i].cell_number << "\t";
out << call_DB[i].relays << "\t";
out << call_DB[i].call_length << "\t";
out << call_DB[i].net_cost << "\t";
out << call_DB[i].tax_rate << "\t";
out << call_DB[i].call_tax << "\t";
out << call_DB[i].total_cost << endl;
}
}
}
感谢。
答案 0 :(得分:2)
您的operator<<
函数是全局函数,而不是callClass
的成员。要访问这些字段,您需要使用Org.call_DB
,Org.count
和Org.isEmpty();
。
答案 1 :(得分:2)
因为你没有&#34;资格&#34;那些成员到一个实例。你需要写
ostream & operator<<(ostream & out, callClass &Org)
{
if (Org.isEmpty() == 1)
// ^^^^^
相似Org.count
和Org.call_DB
等。
请记住,您的operator<<
是全局功能,而不是成员功能。否则你首先不需要宣称它是朋友。
答案 2 :(得分:0)
为什么友方功能无法访问isEmpty(),count和call_DB []?
因为您不明白&#34;访问&#34;手段。这并不意味着友元函数成为类的方法,因此您不能在尝试时隐式使用this
,您应该使用Org
参数:
out << setw(10) << Org.call_DB[i].firstname << " ";
其余部分相同。
答案 3 :(得分:0)
您的朋友功能不是会员功能,因此没有&#39;这个&#39;可用。您的操作员代码应如下所示:
ostream & operator<<(ostream & out, callClass &Org)
{
for (int i = 0; i < count; i++)
{
out << Org.call_DB[i] << endl;
}
}
}
然后您还必须为<<
提供运营商callRecord
。