朋友功能无法访问私人数据成员

时间:2015-04-13 21:22:18

标签: c++ class operators

我正在尝试编写重载的插入和运算符操作符,但函数无法访问类Money的私有成员。我有“include namespace std;”和“#include”但它不会让我访问私人会员(美元和美分)。

ostream & operator<<(ostream &osObject, Money &right)
{
    osObject << "Amount of money: $" << right.dollars << ".";
    osObject << right.cents;

    return osObject;
}

istream &operator>>(istream &isObject, Money &right)
{
    isObject >> right.dollars;
    isObject.ignore();
    getline(isObject, right.cents;

    return isObject;
}`

标题文件:

#pragma once
class Money{
    // Friends
    friend ostream & operator<<(ostream, Money);
    friend istream & operator>>(istream, Money);
private:
    int dollars;
    int cents;
    void simplify();
//Some other stuff...

我遇到的错误如下: 语法错误:缺少';'在'&amp;'之前 'ostream':日期声明中不允许'朋友' 假设缺少类型说明符。 C ++不支持default-int

2 个答案:

答案 0 :(得分:3)

您的功能定义是

ostream & operator<<(ostream &osObject, Money &right)

你的原型是

friend ostream & operator<<(ostream, Money);

这些不一样,因为第一个使用ostream引用参数,第二个使用普通的ostream对象。你需要进行这些匹配:

friend ostream & operator<<(ostream &, Money &);

答案 1 :(得分:0)

juanchopanza 已经在评论中给出了答案。万一你想在行动中看到它:

friend ostream & operator<<(ostream&, Money);
friend istream & operator>>(istream&, Money);

运算符参数ostream和istream中缺少参考符号。