gpt4 book ai didi

c++ - 为什么重载运算符 << 有时有效但有时无效

转载 作者:搜寻专家 更新时间:2023-10-31 01:03:50 25 4
gpt4 key购买 nike

不知道为什么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';
~~~~~~~~^ ~~~~~~~~~~~~~~~

最佳答案

因为您不能将临时变量绑定(bind)到非常量左值引用。更改运算符以采用 const 引用:

std::ostream& operator<<(std::ostream& out, const Date& b)

关于c++ - 为什么重载运算符 << 有时有效但有时无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25113832/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com