请不要对此进行投票或将此问题标记为重复,因为我在其他问题中看到的所有答案都没有对我有效。
我创建了一个名为contact的类,用于存储有关联系人的信息。我试图实现一个运算符<<输出所有信息,所以我不得不把它变成朋友的功能。这个问题是我无法访问任何类的成员函数。我的代码如下:
contact.h:
class contact {
long id;
string first;
string middle;
string last;
string company;
string home;
string office;
string email;
string mobile;
string street;
string city;
string state;
long zip;
string country;
vector<contact> affiliates;
public:
// output and input
friend ostream &operator<<(ostream &, const contact &);
};
contact.cpp:
...
ostream &operator<<(ostream &os, contact &rec) {
print(os, rec.id);
return os;
}
...
如您所见,函数原型完全相同,并且我没有将类封装在命名空间中,这使得操作符无法访问成员变量。这是我原型的问题吗?任何帮助,将不胜感激。感谢。
答案 0 :(得分:3)
operator<<
声明和定义实际上不相同。在friend
声明中,第二个参数是const contact &
,在定义中它只是contact&
。
因此,该定义实际上与类中的friend
声明无关,并定义了另一个不是contact
的朋友的函数。