我在课程日期创建了_year,_day,_date作为私有整数 错误:`_ year'不是类型,类似于day和mon()() 错误:'operator>>'的模糊重载在'istr>> ((const oop244 :: Date *)this) - > oop244 :: Date :: _ year'
注意:候选人是: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 :(得分:0)
重载&lt;&lt;然后,必须将operator函数声明为Date类的朋友,以便它可以访问Date对象中的私有数据。
friend std::ostream &operator<<(std::ostream& ostr,Date &d)
friend std::ostream &operator<<(std::ostream& ostr,Date &d)
以下是一个可供参考的示例。
答案 1 :(得分:0)
您的描述 - 坦率地说 - 非常糟糕,因为您还没有包含所有相关代码(例如类定义),包含与您的问题无关的代码,并且已经从您的错误消息中粗略地总结了错误消息复制实际错误消息时的编译器会提供信息。
很明显,您只是随意输入代码,然后想知道为什么它不起作用。而你的描述依赖于这里的人们作为思想领袖,大多数人都不是。
但是,我会给您的代码中的一些问题提供一些指示。
一个是operator<<()
std::ostream &operator<<(std::ostream& ostr,Date &d)
{
return d->write(ostr);
}
在此,d
是引用,但d->write(ostr)
将其视为指针。那是无效的。请改用d.write(ostr)
。类似地,在运算符&gt;&gt;()。
另一个问题出在您的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
也是一个指针,因此.
运算符无效。该函数实际上需要写出Date
,_year
和_mon
的值(可能被声称为_day
的成员)。但是没有。