这个错误怎么解决,求助,error C2679: binary '<<'
#include<map>
#include<algorithm>
#include<iterator>
#include<string>
#include<iostream>
using namespace std;
typedef map<string, int> months_type;
template <class First,class Second>
ostream& operator<<(ostream& out,const pair<First,Second> &p)
{
cout<<p->first<<" has "<<p->second<<" days";
return out;
}
ostream& operator<<(ostream& out,const months_type & l)
{
copy(l.begin(),l.end(),ostream_iterator<months_type::value_type>(cout,";"));
return out;
}
void main()
{
months_type months;
typedef months_type::value_type value_type;
months.insert(value_type(string("January"),31));
months.insert(value_type(string("February"),28));
months.insert(value_type(string("April"),30));
months.insert(value_type(string("March"),31));
cout<<months<<endl;
}
//编译时的错误
//error C2679: binary '<<' : no operator defined which takes a right-hand operand of type 'const struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class st
[解决办法]
因为ostream_iterator会寻找operator<<,而std namespace里面有很多operator<<,因此编译器不会去全局空间查找operator<<。也就是说,std::operator<<隐藏了::operator<<。把operator<<放入std namespace即可编译通过。
- C/C++ code
#include<map>#include<algorithm>#include<iterator>#include<string>#include<iostream>using namespace std;typedef map<string, int> months_type;namespace std{ template <class First,class Second> ostream& operator<<(ostream& out, const pair<First,Second> &p) { cout<<p.first<<" has "<<p.second<<" days"; return out; } ostream& operator<<(ostream& out,const months_type & l) { copy(l.begin(), l.end(), ostream_iterator<months_type::value_type>(out, ";\n")); return out; }}void main(){ months_type months; typedef months_type::value_type value_type; months.insert(value_type(string("January"),31)); months.insert(value_type(string("February"),28)); months.insert(value_type(string("April"),30)); months.insert(value_type(string("March"),31)); cout<<months<<endl;}