C++ istream >> 和 ostream << 错误
C++ istream >> and ostream << errors
我在date类中创建了_year、_day和_date作为私有整数
错误:"_year"不是write()中day和mon的类型和类似项
错误:"istr>>"中"operator>>"的重载不明确((const oop244::Date*)this)->oop244::Date::_year"
注意:候选者是:std::basic_stream<_CharT,_Traits>&std::basic_istream<_CharT,_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);
}
重载的<lt;运算符函数必须声明为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
、_mon
和_day
的值(可能声明为Date
的成员)。但事实并非如此。
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- 如何防止clang格式在流运算符调用之间添加换行符<<
- <<操作员在下面的行中工作
- EASTL矢量<向量<int>>连续的
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ
- 为什么将此对向量&lt; map&lt; int,int&gt;&gt;中的地图进行更新.失败
- C :对矢量进行排序&lt; struct&gt;(结构有2个整数)基于结构的整数之一
- 明确的专业化“ CheckIntmap&lt;&gt;”实例化
- 什么是模板&lt;&gt;inline bla bla
- 编辑C Qlist&lt; object*&gt; gt;QML代码和一些QML警告中的模型
- eigen :: llt&lt;eigen :: matrixxd&gt;具有不完整的类型
- 错误,包括&lt; ctype&gt;在原子上使用C 11
- std::vector<;uint8_t>;当C++11/14启用时,手动复制而不是调用memcpy
- 如何加入向量&lt; int&gt;到C 中的单个INT
- 是std :: set&lt; std :: future&gt;不可能存在
- 是numeric_limits&lt; int&gt; :: is_modulo从逻辑上矛盾
- opencv 2.4.7在iOS错误背景_segm.hpp #include&lt; list&gt;未找到
- 在修改列表后,std :: list&lt; t&gt; :: end()的值是否会更改
- ///<评论></评论>在Visual Studio中