了解ostream过载
Understanding ostream overload
我很难理解为类重载ostream方法时收到的错误。
.cpp类中的代码
ostream& operator<<(ostream& out, const dateType& d)
{
out << d.getYear() << "-" << d.getMonth() << "-" << d.getDay()
return out;
}
我知道这三个getter都能工作,请在我的main.cpp.中测试它们
然而,当我运行这样的程序时:
cout << d1 << endl:
我得到这个错误:
‘std::ostream& dateType::operator<<(std::ostream&, dateType&)’ must take exactly one argument
ostream& operator<<(ostream&, dateType&);
我为另一个运行良好的程序编写了这样的ostream代码。那么为什么我会在这里得到错误呢?
您将其作为dateType
的成员函数编写,而成员operator<<
只能接受一个显式参数(因为第一个参数是隐式的,运算符是二进制的)。现在你有一个三个参数operator<<
,取隐式dateType
,然后是std::ostream&
,然后是另一个dateType
!
以下是成员operator<<
的样子:
struct T
{
operator<<(ostream&);
};
这个问题是,现在有一个operator<<
,它在左边取T
,在右边取流,这与惯例相反。T() << std::cout
不对,是吗?
按照惯例,我们为operator<<
重载使用名称空间范围,在这里我们可以完全控制参数顺序。
也就是说,不使其成为dateType
的成员函数
如果这些getter是private
,那么您可能需要将这个新函数设置为dateType
的friend
。
我为另一个运行良好的程序编写了这样的ostream代码。
不,你/它没有。
相关文章:
- ostream过载时的缓冲区冲洗
- gcc和c++17的过载解析失败
- C++Cast运算符过载
- 需要从 istream 和 ostream 派生 iostream
- 'max'匹配'std::function<const int &(const int &, const int &)>'无过载
- 过载'operator new'如何导致无限循环?
- "ostream &os"有什么用?
- 为什么常量词在重载运算符中不与 ostream 对象一起使用<<?
- "Inverse SFINAE"避免模棱两可的过载
- 操作员C++的模棱两可的过载
- C++中>>操作员过载时出现问题?
- 基于返回类型的转换和过载扣除
- 没有可行的过载'='错误,可能导致这种情况的原因是什么?
- ostream 运算符<< 为获取 STL 容器而过载,传递 std::string 会破坏它?
- C++使 ostream 和 istream 运算符过载
- 模板二叉搜索树 ostream 过载问题
- 为什么"ostream & os"必须在那里C++操作员过载?
- C++ ostream <<过载问题
- 了解ostream过载
- Segfault是由std::ostream::sentry在流运算符的过载中引起的