c++ - 友元函数无法访问私有(private)数据成员

标签 c++ class operators

我正在尝试编写重载的插入和执行运算符,但这些函数无法访问 Money 类的私有(private)成员。我有“include namespace std;”和“#include”,但它不允许我访问私有(private)成员(美元和美分)。

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...

我收到如下错误: 语法错误:缺少“;”前 '&' 'ostream' : 不允许在日期声明中使用 'friend' 缺少类型说明符 - 假定为 int。 C++ 不支持 default-int

最佳答案

你的函数定义是

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

你的原型(prototype)是

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

它们是不一样的,因为第一个采用 ostream 引用参数,第二个使用普通的 ostream 对象。您需要使这些匹配:

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

关于c++ - 友元函数无法访问私有(private)数据成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29615337/

相关文章:

c++ - 将指针参数传递给双指针参数

c++ - 引用临时和警告

swift - 在 Swift 2 中创建一个类

c# - 使用 Emailmessage 类检索邮件正文

c++ - 在使用 cmake 构建的项目中添加头文件和 .cpp 文件

c++ - 如何将 Poco::SharedPtr 传递给 TimerCallback 函数?

c++ - 如何定义两个相互依赖的类,最好是在同一个头文件中?

regex - 正则表达式 : how to interpret *?

C++ 运算符代码继承出现问题 : am I require to copy same code for all derived classes?

R: += (plus equals) 和++ (plus plus) 等价于 c++/c#/java 等?