得到此错误,我非常确定它位于运算符<<功能。两张照片都是公开的。
void CRational::print() const
{
print(cout);
}
void CRational::print(ostream & sout) const
{
if(m_denominator == 1)
cout << m_numerator;
else
cout << m_numerator << "/" << m_denominator;
}
ostream operator<<(ostream & sout,const CRational a)
{
a.print();
return sout;
}
CRational operator++() // prefix ++x
{
m_numerator += m_denominator;
return *this;
}
in main:
cout << "e before: " << e << ", \"cout << ++e\" : " << ++e << " after: " << e << endl;
答案 0 :(得分:12)
您需要通过引用返回ostream,而不是值。它试图调用构造函数。 也可以通过'a'作为参考:
ostream& operator<<(ostream & sout,const CRational& a)
我还注意到打印方法可能是错误的。它已将sout
作为流的名称传递,但随后直接使用cout
实现。它应该是
void CRational::print(ostream & sout) const
{
if(m_denominator == 1)
sout << m_numerator;
else
sout << m_numerator << "/" << m_denominator;
}
答案 1 :(得分:5)
ostream operator<<(ostream & sout,const CRational a)
^ You are trying to return by value
Streams不可复制,因此您无法按值返回。您需要通过引用(std::ostream&
)返回流。
另外,您可能应该在sout
函数中输出CRational::print(ostream&)
(否则,为什么将其作为参数?)并且当您调用{时,您可能应该传递sout
你的a.print()
重载中的{1}}(否则,重载并不会真正实现流的惯用operator<<
重载)。
答案 2 :(得分:2)
operator<<
应该返回对ostream
的引用:ostream& operator<<
...
你的功能也有点搞砸了。您应该使用已命名为cout
的{{1}},而不是使用ostream
。