我不知道为什么cout << da << '\n'
工作正常,但std::cout << next_Monday(da) << '\n'
出错了。为什么直接Date
对象可以输出,但返回Date
不能。
为什么重载operator <<
有时会起作用,但有时则不起作用。
这是我的代码..
#include <iostream>
#include <stdlib.h>
struct Date {
unsigned day_: 5;
unsigned month_ : 4;
int year_: 15;
};
std::ostream& operator<<(std::ostream& out,Date& b)
{
out << b.month_ << '/' << b.day_ << '/' << b.year_;
return out;
}
std::istream& operator>>(std::istream& in,Date& b);
Date next_Monday(Date const &d);
int main()
{
Date da;
std::cin >> da;
std::cout << da << '\n';
std::cout << next_Monday(da) << '\n';
return 0;
}
这就是clang所说的:(我用g ++来调用)
excercise19DateManipulate.cpp:114:18: error: invalid operands to binary
expression ('ostream' (aka 'basic_ostream<char>') and 'Date')
std::cout<< next_Monday(da) <<'\n';
~~~~~~~~^ ~~~~~~~~~~~~~~~
答案 0 :(得分:6)
因为您无法将临时绑定到非const左值引用。更改运算符以获取const
引用:
std::ostream& operator<<(std::ostream& out, const Date& b)
答案 1 :(得分:-2)
你从未定义过&#34; next_Monday()&#34;据我所见,你只宣告它。