重载<<报错:error: ‘std::basic_ostream<_CharT, _Traits>::basic_ostream(const std::basic_ostream<_CharT, _Traits>&) [with _CharT = char; _Traits = std::char_traits]’ is protected
具体可以看:https://coderedirect.com/questions/608505/about-stdostream-constructor
#include <iostream>
#include <typeinfo>
using namespace std;
template <typename T1, typename T2>
std::ostream& operator << (std::ostream& strm, const std::pair<T1, T2>& p) {
return strm << "[" << p.first << ", " << p.second << "]";
}
int main()
{
// error: ‘std::basic_ostream<_CharT, _Traits>::basic_ostream(const std::basic_ostream<_CharT, _Traits>&) [with _CharT = char; _Traits = std::char_traits<char>]’ is protected
// std::ostream strm = std::cout;
std::ostream& strm = std::cout; //正确
std::pair<int, int> p{1, 2}, p2{3, 4};
//std::cout << p << p2;
//或者采用
strm << p << p2;
return 0;
}