2015-04-03 127 views
0

我在_ Date類中創建了_year,_day,_date作爲私有整數。
錯誤:`_year'不是類型和類似的日期和星期一在寫()
錯誤:在'istr >>((const oop244 :: Date *)'運算符>>'模糊重載) - > oop244 ::日期:: _今年
C++ istream >>和ostream << errors

note: candidates are: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(std::basic_istream<_CharT, _Traits>&(*)(std::basic_istream<_CharT, _Traits>&)) [with _CharT = char, _Traits = std::char_traits]

std::ostream& Date::write(std::ostream& ostr) const 
{ 
    int year,mon,day; 
    return ostr<<year<< "/" <<mon<< "/" <<day; 
    this._year=year; 
    this._mon=mon; 
    this._day=day;   
} 

//overloading istream for object Date input 
std::istream& Date::read(std::istream& istr)const 
{ 
    char c; 
    istr>>_year>>c>>_mon>>c>>_day;// char c for '/' 
    if(istr.fail()) 
     _readErrorCode=1; 
    this->validate(); 
    return istr; 
} 

//overloading << operator 
std::ostream &operator<<(std::ostream& ostr,Date &d) 
{ 
    return d->write(ostr); 
} 

//overloading >> operator 
std::istream& operator>>(Date &d,std::istream& istr) 
{ 
    return d->read(istr); 
} 
+0

重載規則使這個模糊不清,這就是編譯器所抱怨的。您需要將構造函數標記爲顯式。 – 2015-04-03 06:41:07

+0

yanivx請你解釋一下。 – 2015-04-03 07:09:05

+0

夫婦的事情:1.你有一個錯位的'}'。除非Date類中有'operator' - ''重載,否則'd->'應該是'd''。也許發佈* real *代碼? – WhozCraig 2015-04-03 07:11:06

回答

0

重載< <操作功能必須被聲明爲類Date的朋友,所以它可以在Date對象中訪問私人數據。

friend std::ostream &operator<<(std::ostream& ostr,Date &d) 
friend std::ostream &operator<<(std::ostream& ostr,Date &d) 

下面是一個可以用作參考的例子。

Link to similar example

+1

,但我想這樣做,而不使用朋友功能 – 2015-04-03 07:09:47

+0

我可以知道什麼是使用朋友功能的問題我沒有看到任何功能影響,你看到的例子,在它的鏈接工作正常。 – 2015-04-03 07:18:57

+0

我的老師指示我們做不使用朋友功能 – 2015-04-03 07:25:36

0

你的描述 - 坦率地說 - 是相當的差,因爲你還沒有包括所有相關的代碼(例如類定義),已包括代碼不是你的問題相關,並給了一個草率的總結在複製實際錯誤消息時,來自編譯器的錯誤消息會提供信息。

很明顯,你只是隨機輸入代碼,然後想知道爲什麼它不起作用。你的描述依賴於這裏的人作爲mindreaders,大多數人不是。

但是,我會給你的代碼中的一些問題的幾個指針。

一個是在operator<<()

std::ostream &operator<<(std::ostream& ostr,Date &d) 
{ 
    return d->write(ostr); 
} 

在該定義中,d是一個參考,但d->write(ostr)對待它像一個指針。這是無效的。改爲使用d.write(ostr)。同樣在運算符>>()中。

的另一個問題是在你的Date::write()

std::ostream& Date::write(std::ostream& ostr) const 
{ 
    int year,mon,day; 
    return ostr<<year<< "/" <<mon<< "/" <<day; 
    this._year=year; 
    this._mon=mon; 
    this._day=day; 
} 

第一條語句創建三個局部變量,yearmonthday。他們在寫出來之前不會被初始化。從this._year=year開始的三條線甚至沒有到達,因爲函數返回。 this也是一個指針,所以.運算符是無效的。該函數實際上需要寫出_year_mon_day的值(可能宣稱爲Date的成員)。但沒有。

+0

請給我你的郵件ID我會發送完整的代碼...我只剩下2個小時修復它會幫助我。 – 2015-04-03 08:22:24

+0

這是我的郵件地址 - [email protected] – 2015-04-03 08:44:26

相關問題