顺便说一句,我在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);
它抱怨它必须有两个。我做错了什么?
答案 0 :(得分:4)
运算符的双参数重载必须是非成员函数。要么将它移出类定义,要么添加friend
使其成为非成员朋友函数,无论哪个更有意义。
单参数重载没有用,因为当对象实例是左操作数时使用它。
答案 1 :(得分:0)
friend ostream& operator<<(ostream& os, const Date& date);
您还可以为代码添加一些功能。例如..
bool operator==(const Date& rhs) const;
我还建议你将所有整数设为int,即使它们只取一个小值(例如月份),除非有技术原因你需要将它们作为字符。