重载运算符<<无法绑定basic_ostream<char>值
Overloading operator<< Cannot bind basic_ostream<char> lvalue
为什么这不起作用:
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
};
问题在于你调用operator<<
的地方,而不是它的定义。
您可能在这样的上下文中调用它:
std::ofstream() << "Hello World";
即您正在写入临时ostream
.这与operator<<
的定义相反,在定义中,您声明您正在使用">永久"(即不是临时(的ostream。
编辑
在进一步检查错误消息后,问题在于缺少类型 enum class Month
的operator<<
定义。添加这样的定义,即 std::ostream& operator<<(std::ostream& os, Month m)
,解决了问题。
我的工作正常
#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;
}
相关文章:
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- ostream过载时的缓冲区冲洗
- 需要从 istream 和 ostream 派生 iostream
- 如何防止clang格式在流运算符调用之间添加换行符<<
- <<操作员在下面的行中工作
- "ostream &os"有什么用?
- 为什么常量词在重载运算符中不与 ostream 对象一起使用<<?
- 我的运算符重载是否有效<<(流插入)左操作数不是 ostream
- C++表达SFINAE和ostream操纵器
- 在抛出 'std::runtime_error' 的实例后终止调用 what(): Filebuf 和 ostream 的 I/O 错误
- oStream 不打印添加两个 valarray 的结果(使用运算符重载)
- C++运算符<<调用::ostream而不是std::osttream
- BOOST ::变体无法解决运算符&lt;&lt;对于STD :: Ostream
- C++ostream:没有运算符匹配<<&应在'&'代币
- 重载运算符<<用于ostream语法
- 重载ostream&时转换错误无效;operator< & lt;
- 运算符<<(ostream&os,..)用于模板类
- std::ostream&operator< & lt; (std:: ostream&压力,压力& &;val)
- 上Ostream & lt; & lt;重载的困惑