朋友的功能不是找私人会员

时间:2016-03-09 04:38:28

标签: c++

请不要对此进行投票或将此问题标记为重复,因为我在其他问题中看到的所有答案都没有对我有效。

我创建了一个名为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;
}
...

如您所见,函数原型完全相同,并且我没有将类封装在命名空间中,这使得操作符无法访问成员变量。这是我原型的问题吗?任何帮助,将不胜感激。感谢。

1 个答案:

答案 0 :(得分:3)

operator<<声明和定义实际上相同。在friend声明中,第二个参数是const contact &,在定义中它只是contact&

因此,该定义实际上与类中的friend声明无关,并定义了另一个不是contact的朋友的函数。