2013-10-10 7 views
0

У меня есть класс Date, который я пытаюсь протестировать с помощью простой программы, чтобы попросить пользователя ввести дату в определенном формате, который затем будет помещен в класс. Идея состоит в том, чтобы позволить пользователю установить класс Date из любой строки текста, начиная с правильного формата.Оператор перегрузки >>

Вот мой файл заголовка класса даты (в implimentations остальных функций не относятся к этой должности):

#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.

+0

Пожалуйста, сообщите полное описание ошибки. «Это не работает» недостаточно. –

ответ

2

Ваши operator << и operator >> функции принимают один параметр, если они действительно должны принимать два. Они также должны быть friends класса это:

std::ostream& operator<< (std::ostream& os) 

должен быть

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

и внутри тела функции вы используете date.[member] для доступа к элементам данных. То же самое относится к функции operator >>, только параметр, который он принимает, должен быть не -const.

+0

Затем их следует перемещать за пределы класса. У ФП они были внутри. – pippin1289

+0

@ pippin1289 Спасибо, обновлено. – 0x499602D2

+0

Я сделал, как вы предложили, и объявила его как друга, и теперь он компилируется. Однако выход моей тестовой программы таков: $ ./date_test Дата инициализации, печать: 0000-00-00-00: 00: 00 Это тест библиотеки даты! Пожалуйста, введите дату в формате YYYY-MM-DD-HH: mm: ss: 2013-04-08-13: 26: 34 Дата сброса, печать: 0000-00-00-00: 00: 00 Выход! – KG6ZVP

Смежные вопросы