У меня есть класс Date, который я пытаюсь проверить с помощью простой программы, чтобы попросить пользователя ввести дату в определенном формате, который затем будет помещен в класс. Идея состоит в том, чтобы позволить пользователю установить класс Date из любой строки текста, начиная с правильного формата.
Вот мой заголовок заголовка даты (последствия других функций не относятся к этому сообщению):
#ifndef DATE_HPP_
#define DATE_HPP_
#include <iostream>
#include <cstdio>
class Date {
public:
int Year;
int Month;
int Day;
int HH;
int MM;
int ss;
Date();
int getTotalSeconds();
/*
* 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();
//Declared as member functions
std::ostream& operator<<(std::ostream& os){
os << "operator<<: " << this->Year << '-' << this->Month << '-' << this->Day << '-' << this->HH << ':' << this->MM << ':' << this->ss;
return os;
}
std::istream& operator>>(std::istream& is){
char input[20];
is >> input;
scanf(input,"%04d-%02d-%02d-%02d:%02d:%02d",Year,Month,Day,HH,MM,ss);
is.clear();
return is;
}
};
#endif
Моя тестовая программа выглядит так:
#include <iostream>
#include "Date.hpp"
int main(int argc, char* argv[]){
Date date;
std::cout << "Date initialized, printing: \n" << date << std::endl;
std::cout << "This is a test of the date library!\nPlease enter a date in the form YYYY-MM-DD-HH:mm:ss: ";
std::cin >> date;
std::cout << "\n\nDate reset, printing:\n" << date << std::endl << "Exit!\n";
return 0;
}
Я не знаю, что я делаю неправильно. Я искал информацию о перегрузках операторов, а оператор << отлично работает! (Я скомпилировал и протестировал все, прежде чем я попытался перегрузить оператора >>). Если это помогает, я использую gcc в arch linux.
Функции operator <<
и operator >>
принимают один параметр, если они фактически должны брать два. Они также должны быть friends
класса. Это:
std::ostream& operator<< (std::ostream& os)
должно быть
friend std::ostream& operator<< (std::ostream& os, Date const& date)
и внутри тела функции вы используете date.[member]
для доступа к членам данных. То же самое касается функции operator >>
, только требуемый параметр должен быть неконстантной ссылкой.