4

这是我的课:

#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

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

4

2 回答 2

16
ostream &operator<<(ostream &out, Clock &clockObj); 

应该

friend ostream &operator<<(ostream& out, Clock &clockObj);    

在类之外定义。

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

于 2013-04-03T02:40:38.150 回答
11
 ostream &operator<<(ostream &out, Clock &clockObj);

应该

 friend ostream &operator<<(ostream &out, Clock &clockObj);

根据 Stanley 等人的 C++ Primer (Fourth Edition pp 514):

当我们定义一个符合 iostream 库约定的输入或输出操作符时,我们必须将其设为非成员操作符。我们不能让操作符成为我们自己类的成员。如果我们这样做了,那么左边的操作数必须是我们类类型的对象

因此,重载<<>>作为类的友元函数是一种很好的做法。

于 2013-04-03T02:41:47.553 回答