【发布时间】:2020-03-20 06:08:38
【问题描述】:
我正在尝试使用 stl idioms 通过为该对定义运算符
typedef pair<int, int> P;
// Dump wrapper, just converting implicitly pair<int, int> to PC.
class PC { public: int first; int second; PC(const P& p) { first = p.first; second = p.second;}};
ostream& operator<<(ostream& o, const PC& v) {
return o << "(" << v.first << "," << v.second << ")";
}
ostream& operator<<(ostream& o, const P& v) {
return o << "(" << v.first << "," << v.second << ")";
}
int main(int argc, const char * argv[]) {
P p = {10,20};
cout << p; // works
*ostream_iterator<PC>(cout, ", ") = p; // works
*ostream_iterator<P>(cout, ", ") = p; // fails, error msg below
}
iterator:974:28: 二进制表达式的无效操作数 ('std::__1::ostream_iterator, char, std::__1::char_traits >::ostream_type' (aka 'basic_ostream >') 和 'const std: :__1::pair')
_LIBCPP_INLINE_VISIBILITY ostream_iterator& operator=(const _Tp& __value_)
{
*__out_stream_ << __value_; //// <<<---- Here is the error line
if (__delim_)
*__out_stream_ << __delim_;
return *this;
}
似乎没有找到 my operatorglobal 命名空间中,而不是在 std 命名空间中吗?
【问题讨论】:
标签: c++ templates stl iterator ostream