C ++编译器有关于重载<<<<<<<<操作者

时间:2013-10-08 23:43:23

标签: c++ operator-overloading iostream

顺便说一句,我在arch linux上使用eclipse和g ++(不到一周前我运行了pacman -Syu,所以一切都是最新的。)

每次我尝试编译时,Eclipse都会产生错误:

#ifndef DATE_HPP_
#define DATE_HPP_

using namespace std;

class Date {
public:
    int Year;
    char Month;
    char Day;
    char HH;
    char MM;
    char ss;
    Date();

    /*
     * Overloaded Operator Functions
     */
    //Assignments
    Date operator=(Date input);
    //Comparisons
    bool operator==(Date& rhs);
    bool operator!=(Date& rhs);
    bool operator<(Date& rhs);
    bool operator>(Date& rhs);
    bool operator<=(Date& rhs);
    bool operator>=(Date& rhs);
    //Conversion
    operator char*();
    operator std::string();
    ostream& operator<<(ostream& os, const Date& date); //TROUBLE LINE
};

#endif /* DATE_HPP_ */

Eclipse在运算符上显示一条消息&lt;&lt;声明说它必须只有一个参数。然而,当我宣布这样的时候:

ostream& operator<<(const Date& date);

它抱怨它必须有两个。我做错了什么?

2 个答案:

答案 0 :(得分:4)

运算符的双参数重载必须是非成员函数。要么将它移出类定义,要么添加friend使其成为非成员朋友函数,无论哪个更有意义。

单参数重载没有用,因为当对象实例是左操作数时使用它。

答案 1 :(得分:0)

friend ostream& operator<<(ostream& os, const Date& date);

您还可以为代码添加一些功能。例如..

bool operator==(const Date& rhs) const;

我还建议你将所有整数设为int,即使它们只取一个小值(例如月份),除非有技术原因你需要将它们作为字符。