Кстати, я использую eclipse и g++ в arch linux (я запускал 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 показывает сообщение оператора << объявления, в котором говорится, что он должен иметь только один аргумент. Тем не менее, когда я заявляю следующее:
ostream& operator<<(const Date& date);
Он жалуется, что у него должно быть два. Что я делаю не так?
Перегрузка с двумя аргументами оператора должна быть функцией, не являющейся членом. Либо выведите его из определения класса, либо добавьте к нему friend
чтобы сделать его функцией, не являющейся членом, в зависимости от того, что имеет больше смысла.
Перегрузка с одним аргументом не полезна, так как она используется, когда экземпляр объекта является левым операндом.
friend ostream& operator<<(ostream& os, const Date& date);
Также вы можете добавить некоторые константы в свой код. Например..
bool operator==(const Date& rhs) const;
Я также предлагаю вам сделать все целые int, даже если они будут принимать только небольшое значение (например, месяц), если нет технической причины, по которой вам нужно, чтобы они были символами.