2013-10-10 141 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; 
} 

我不我不知道我做錯了什麼。我一直在尋找信息超載運營商和運營商< <偉大的工程! (我編譯和測試了一切,然後我嘗試了重載操作符>>)如果有幫助,我在arch linux上使用gcc。

+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

然後這些應該被移到課堂之外。 OP有他們在裏面。 – 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