为什么这不起作用:
ostream& operator<<(ostream& os, const Date& d)
{
return os << '(' << d.year() << ',' << d.month();
}
虽然这有效:
ostream& operator<<(ostream& os, const Date& d)
{
return os << '(' << d.year() << ',';
}
编辑错误:
error: cannot bind 'std::basic_ostream<char>' lvalue to 'std::basic_ostream<char>&&'|
error: initializing argument 1 of 'std::basic_ostream<_CharT, _Traits>& std::operator<<(std::basic_ostream<_CharT, _Traits>&&, const _Tp&) [with _CharT = char; _Traits = std::char_traits<char>; _Tp = Chrono::Month]'|
我发现了一些关于此的问题,但他们的问题太过先进,我无法理解。
修改2
month()
功能:
Month month() const {return m;}
Month
enum class
:
enum class Month
{
jan = 1, feb, mar, apr, may, jun, jul, aug, sep, oct, nov ,dec
};
答案 0 :(得分:2)
问题在于您调用operator<<
,而不是在其定义中。
你可能在这样的上下文中调用它:
std::ofstream() << "Hello World";
即。您正在写入临时 ostream
。这与operator<<
的定义形成对比,在operator<<
中,您声明您正在使用“永久”(即不是临时的)ostream。
修改强>
在进一步检查错误消息后,问题出现在enum class Month
类型的std::ostream& operator<<(std::ostream& os, Month m)
缺少定义。添加这样的定义,即 object GzipJson extends (Response => JValue) {
def apply(r: Response) = {
if(r.getHeader("content-encoding")!=null && r.getHeader("content-encoding").equals("gzip")){
(parse(new GZIPInputStream(r.getResponseBodyAsStream), true))
}else
(dispatch.as.String andThen (s => parse(StringInput(s), true)))(r)
}
}
,解决了这个问题。
答案 1 :(得分:0)
我的工作正常
#include <iostream>
class Date
{
private:
int d, m, y;
public:
Date(int _d, int _m, int _y) : d(_d), m(_m), y(_y) {}
int day() const { return d; }
int month() const { return m; }
int year() const { return y; }
friend std::ostream &operator<<(std::ostream &out, Date &d);
};
std::ostream &operator<<(std::ostream &out, Date &d)
{
return out << '(' << d.year() << ',' << d.month();
}
int main()
{
std::cout << Date(1, 2, 3) << std::endl;
return 0;
}