重载<<运算符错误C2804:二进制'运算符<<'有太多参数

var*_*ick 4 c++ class operator-overloading

这是我的班级:

#ifndef CLOCK_H
#define CLOCK_H
using namespace std;

class Clock
{
    //Member Variables

    private: int hours, minutes;

    void fixTime( );

    public:
        //Getter & settor methods.
        void setHours(int hrs); 
        int getHours() const;
        void setMinutes(int mins); 
        int getMinutes() const; 

        //Constructors
        Clock(); 
        Clock(int);
        Clock(int, int);
        //Copy Constructor
        Clock(const Clock &obj);
        //Overloaded operator functions
        void operator+(const Clock &hours);
        void operator+(int mins);
        void operator-(const Clock &hours);
        void operator-(int minutes1);
        ostream &operator<<(ostream &out, Clock &clockObj); //This however is my problem where i get the error C2804. Saying that it has to many parameters 
};
#endif
Run Code Online (Sandbox Code Playgroud)

所有这个功能应该是在不同时间输出一个时钟的值.

Ani*_*nge 15

ostream &operator<<(ostream &out, Clock &clockObj); 
Run Code Online (Sandbox Code Playgroud)

应该

friend ostream &operator<<(ostream& out, Clock &clockObj);    
Run Code Online (Sandbox Code Playgroud)

在课堂上定义了OUTSIDE.

请参阅此处:operator <<应该实现为朋友还是成员函数?


tao*_*ocp 10

 ostream &operator<<(ostream &out, Clock &clockObj);
Run Code Online (Sandbox Code Playgroud)

应该

 friend ostream &operator<<(ostream &out, Clock &clockObj);
Run Code Online (Sandbox Code Playgroud)

根据Stanley等人的C++ Primer(第四版第514页):

当我们定义符合iostream库约定的输入或输出运算符时,我们必须使它成为非成员运算符.我们不能让运算符成为我们自己的类的成员.如果我们这样做,那么左手操作数必须是我们类类型的对象

因此,重载<<>>作为班级的朋友功能是一种好习惯.