0

顺便说一句,我在 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 在 operator<< 声明中显示一条消息,说明它必须只有一个参数。然而,当我这样声明时:

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

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

4

2 回答 2

4

运算符的双参数重载必须是非成员函数。要么将它移出类定义,要么添加friend到它以使其成为非成员友元函数,以更有意义的方式为准。

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

于 2013-10-08T23:44:45.880 回答
0

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

您也可以在代码中添加一些常量。例如..

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

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

于 2013-10-08T23:48:01.263 回答