[英]C++ istream >> and ostream << errors
我已經在Date類中將_year,_day,_date創建為私有整數。
錯誤:“ _ year”不是類型,在write()中與day和mon類似
錯誤:'istr >>((const oop244 :: Date *)this)-> oop244 :: Date :: _ year'中'operator >>'的模棱兩可的重載
注意:候選人是: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);
}
然后,必須將重載的<<操作符函數聲明為Date類的朋友,以便它可以訪問Date對象內的私有數據。
friend std::ostream &operator<<(std::ostream& ostr,Date &d)
friend std::ostream &operator<<(std::ostream& ostr,Date &d)
這是一個示例,您可以參考。
坦率地說,您的描述很差,因為您沒有包括所有相關代碼(例如,類定義),沒有包含與您的問題不相關的代碼,並且在復制實際代碼時給出了來自編譯器的錯誤消息摘要錯誤消息本來可以提供信息。
很明顯,您只是隨機輸入代碼,然后想知道為什么它不起作用。 您的描述依賴於這里的人是思想閱讀者,而大多數人卻不是。
但是,我將為您的代碼中的一些問題提供一些指導。
一種是在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;
}
第一條語句創建三個局部變量, year
, month
和day
。 在將其寫出之前,不會對其進行初始化。 因為此函數返回,所以甚至沒有達到從this._year=year
開始的this._year=year
。 this
也是一個指針,因此.
運算符無效。 該函數實際上需要寫出_year
, _mon
和_day
的值(可能聲明為Date
成員)。 但是沒有。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.