2015-04-03 133 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

相关问题